web-dev-qa-db-ja.com

添付画像から注目画像を検出

次のコードを使用して、ID付きの投稿から添付画像を抽出します。

$args            =   array(
    'post_type'      => 'attachment',
    'post_parent'    => $product_id,
    'post_mime_type' => 'image',
    'orderby'        => 'menu_order',
    'order'          => 'ASC',
    'numberposts'    => -1
);

$attachments     =   get_posts($args);

問題は、上記のコードがすべての添付ファイルを返すことです。結果から注目の画像を削除する方法はありますか? $ argsクエリ、ifステートメント、または$ attachments配列をフィルタリングすることによってそれを実行するかどうかは気にしません。

親切なメリアノスニコス

1
Merianos Nikos

単にpost__not_in引数を追加してget_post_thumbnail_id()関数を使用するだけです。

$args = array(
    'post_type'      => 'attachment',
    'post_parent'    => $product_id,
    'post_mime_type' => 'image',
    'orderby'        => 'menu_order',
    'order'          => 'ASC',
    'numberposts'    => -1,
    'post__not_in'   => array(get_post_thumbnail_id($product_id))
);
$attachments = get_posts($args);
4
Brian Fegter

はい、

基本的にあなたが望むものはこれです

<?php  
//get post thumbnail url  
$post_thumbnail_id = get_post_thumbnail_id();  
$post_thumbnail_url = wp_get_attachment_url($post_thumbnail_id);  
//get your attachments. <- your query
//now loop your attachments <- foreach or something

 if($attachment->ID != $post_thumbnail_id)
    {
//if the attachment id is the same as your post_thumbnail_id it means you are looking at your feature image
    }
1
woony

上記のコードの後に​​これを試してください。

foreach( $attachments as $key => $attachment ) {
    if ( $attachment->ID == get_post_thumbnail_id( $product_id ) ) {
        unset ( $attachments[$key] );
        break;
    }
}

これで$attachmentsは、注目の画像を除く$product_idのすべての添付ファイルを含みます。

1
Joshua Abenazer