We don’t have an explicit filter for the data array so here are two workarounds that you might give a try:
Approach #1 – As meta data
We can add attachment_id to the meta data for each playlist item, via the wp_get_attachment_metadata
filter, but first we have to register it via the
wp_get_attachment_id3_keys
filter.
Here’s an example:
// 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
Alternatively we can add the ?attachment_id=123
query string to the attachments url, via the wp_get_attachment_url
filter.
Here’s an example:
// 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 );
Hope it helps!