如何获取音频播放列表中的条目ID?

时间:2017-06-21 作者:henrywright

我正在使用wp_playlist_shortcode() 输出音频播放列表。例如:

echo wp_playlist_shortcode( array(
    \'ids\' => $track_ids
) );
多亏了回答中的想法142974, 我正在解开wp_underscore_playlist_templates() 函数并使用我自己的版本prefix_wp_underscore_playlist_templates() 因此,我可以自定义播放列表项目的输出。例如:

add_action( \'wp_playlist_scripts\', function() {
    remove_action( \'wp_footer\', \'wp_underscore_playlist_templates\', 0 );
    add_action( \'wp_footer\', \'prefix_wp_underscore_playlist_templates\', 0 );
} );
现在我只是复制wp_underscore_playlist_templates()prefix_wp_underscore_playlist_templates().

在我的自定义范围内prefix_wp_underscore_playlist_templates() 函数,adata 对象可用,但我相信它只包含与轨迹相关的“数据”,例如data.meta.artistdata.content.

My question

当我在里面的时候,我怎样才能得到赛道的帖子IDprefix_wp_underscore_playlist_templates()?

1 个回复
最合适的回答,由SO网友:birgire 整理而成

我们没有针对数据数组的显式过滤器,因此您可以尝试以下两种解决方法:

Approach #1 - As meta data

我们可以通过wp_get_attachment_metadata 过滤器,但首先我们必须通过wp_get_attachment_id3_keys 滤器

下面是一个示例:

// Add \'attachment_id\' as an id3 meta key
add_filter( \'wp_get_attachment_id3_keys\', $callback_id3 = function( $fields ) 
{
    $fields[\'attachment_id\'] = \'attachment_id\';
    return $fields;
} );

// Add ?attachment_id=123 to the url
add_filter( \'wp_get_attachment_metadata\', $callback_metadata = function ( $data, $post_id )
{
    $data[\'attachment_id\'] = (int) $post_id;
    return $data;
}, 10, 2 );

// Output from playlist shortcode
$output = wp_playlist_shortcode( $atts, $content );

// Remove our filter callback
remove_filter( \'wp_get_attachment_url\', $callback_metadata );
remove_filter( \'wp_get_attachment_id3_keys\', $callback_id3 );

Approach #2 - As query string

或者,我们可以添加?attachment_id=123 通过wp_get_attachment_url 滤器

下面是一个示例:

// Add our filter callback to add ?attachment_id=123 to the url
add_filter( \'wp_get_attachment_url\', $callback = function ( $url, $post_id )
{
    return add_query_arg( \'attachment_id\', (int) $post_id, $url );
}, 10, 2 );

// Output from playlist shortcode
$output = wp_playlist_shortcode( $atts, $content );

// Remove our filter callback
remove_filter( \'wp_get_attachment_url\', $callback );       
希望有帮助!

结束

相关推荐

在特定页面上加载Header.php

(TL;DR 以下提供)我在使用Divi主题时遇到了一个问题。我正在使用Gravity表单插件生成一个具有多重上传的表单。这种多重上传似乎使用了Ajax,从我的小测试来看,这似乎与Divi相冲突。(我将CDN置于开发模式并停用了所有插件,上载按钮/拖放仍然不起作用)。这个问题的解决方案是删掉一些代码:gravity_form_enqueue_scripts( 2, true ); 开业前<?php 以及wp_head(); ?>. 然而,这与台式机上的全宽Divi头冲突。在某种意义