web-dev-qa-db-fra.com

Comment créer une liste d'ID d'images jointes séparées par des virgules?

J'essaie de saisir l'identifiant des images attachées à un message. J'utilise un exemple posté ici , mais je ne parviens pas à renvoyer les identifiants uniquement et non l'ensemble du tableau.

Mon objectif est de renvoyer une liste d'identifiants d'images attachées, séparés par des virgules.

1, 2, 3, 4, 5

Voici ma fonction:

function wpse_get_images() {
    global $post;
    $id = intval( $post->ID );
    $size = 'medium';
    $attachments = get_children( array(
        'post_parent'    => $id,
        'post_status'    => 'inherit',
        'post_type'      => 'attachment',
        'post_mime_type' => 'image',
        'order'          => 'ASC',
        'orderby'        => 'menu_order'
    ) );
    if ( empty( $attachments ) )
        return '';

    $output = "\n";

    /**
     * Loop through each attachment
     */
    foreach ( $attachments as $id  => $attachment ) :

        $title   = esc_html( $attachment->post_title, 1 );
        $img     = wp_get_attachment_image_src( $id, $size );
        $imgID   = wp_get_attachment_metadata( $attachment_id );   
        $imgID   = (string)$imgID;
        $output .= $imgID->$attachment_id.', '; // prints: 1,2,3,4,5,6,8,9,         

    endforeach;

    return $output;
}
1
Heather

Vous pouvez essayer ce one-liner, dans la boucle, au lieu de tout votre code ci-dessus:

$ids = join( ',', wp_list_pluck( get_attached_media('image' ), 'ID' ) );

où nous extrayons les identifiants de la sortie get_attached_media() .

Une autre approche serait d'utiliser:

$ids = join( ',', get_attached_media( '_image_ids' ) );

où nous avons introduit un nouveau paramètre d'entrée _image_ids, supporté par l'utilisation du plugin suivant:

/** 
 * Plugin Name: Enhance the get_attached_media() function.
 * Description: Support for the custom '_image_ids' parameter.
 * Plugin URI:  http://wordpress.stackexchange.com/a/169152/26350
 * Author:      birgire
 * Version:     0.0.1
 */
add_filter( 'get_attached_media_args', function( $args, $type, $post ) {
    if( '_image_ids' === $type )
    {
        $args['post_mime_type'] = 'image';
        $args['fields']         = 'ids';
    }
    return $args;
}, 10, 3 );
1
birgire