web-dev-qa-db-ja.com

最新の画像アップロードを一覧表示しますが、特定のカスタム投稿タイプのみ

私はそのような最新の画像添付ファイルのリストを得ることができます:

$attachments = get_posts( array(
    'post_type' => 'attachment',
    'posts_per_page' => $number,
    'post_mime_type' => 'image'
) );

これは、投稿やページに添付されているか、または[メディア]メニューで添付されていないかにかかわらず、最近アップロードされたすべての画像を返します。

欲しいのは、私が作成したカスタム投稿タイプに添付されている画像だけにそのリストを制限することです。 (カスタム投稿タイプはそれほど重要ではありません。同じ質問が「投稿に添付された画像のみ」または「ページに添付された画像のみ」である可能性があります)。

上記のクエリを実行した後に各画像をテストして、親が正しい投稿の種類ではない画像を削除することはできますが、特定の数の画像($number)を返す必要があります。 !

5
Doug

Get_postsにフィルタを追加してみましたか。これはテストされていません。ちょっと検索した後の考えです。

 function my_filter( $query )
 {
      if( is_home() ) //Example, if u want to display recent images on home
      {
           $query->set( 'post_type', array( 'attachment', 'my_cpt' ) );
      }
 }
 add_filter( 'pre_get_posts', 'my_filter' );

編集:読み直しても、添付ファイルとCPTの投稿の両方が表示されると思います。

それがあなたに何かアイデアを与えるならば、私はそれをここに残しておくと思います。

編集2:私が考えることができるPHPでのフィルタリング以外の他の唯一の方法はカスタムSQLクエリ、そして投稿データの設定です。例:

$sql = "SELECT * FROM wp_posts
        WHERE post_type = 'attachment'
        AND post_parent IN (SELECT ID FROM wp_posts WHERE post_type = 'your-cpt')
        //ORDER BY";

 $posts = $wpdb->get_results( $sql, OBJECT );

 //loop - setup_postdata

さらに詳しい情報: Wordpress Codex

1
Shane

最初に、あなたはあなたのCPTだけのために最近修正された投稿を得ます。それからそれらの添付ファイルを入手してください。もちろん、添付ファイルの配列を制限するためのロジックをいくつか用意できます。

$mycpt = get_posts(array(
                 'post_type'=>'mycpt',
                  'posts_per_page'=>-1,
                  'orderby'=>'modified'
                 ));

$attachments = array();
foreach($mycpt as $mycpt)
{
  $post_attachements = get_posts( array(
    'post_parent'       => $mycpt->ID,
    'post_type'         => 'attachment',
    'post_mime_type'    => 'image',   
    'posts_per_page'    => -1
) );
   foreach($post_attachements as $post_attachements){
     $attachments[] = $post_attachements;
    }

}
1
Rajeev Vyas