列出最近上传的图片,但仅限于特定的自定义帖子类型

时间:2012-01-11 作者:Doug

我可以获得最新图像附件的列表,如下所示:

$attachments = get_posts( array(
    \'post_type\' => \'attachment\',
    \'posts_per_page\' => $number,
    \'post_mime_type\' => \'image\'
) );
这将返回最近上载的所有图像,无论它们是附加到帖子或页面,还是通过“媒体”菜单取消附加。

我想将该列表限制为仅附加到我创建的自定义帖子类型的图像。(自定义帖子类型没有那么重要;相同的问题可能是:“仅附加到帖子的图像”或“仅附加到页面的图像”。)

我意识到,在运行上述查询后,我可以测试每个图像,并消除父对象不是正确的帖子类型的任何图像,但我想返回特定数量的图像($number), 这种方法可以消除部分或全部返回的图像!

3 个回复
SO网友:Shane

您是否尝试添加筛选器以获取\\u帖子。这不是经过测试的,只是经过一点搜索后的一个想法:

 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\' );
EDIT :在重读之后,我认为它并没有完成您想要做的事情,我认为它将显示您的CPT的附件和帖子。

我想我会把它留在这里,以防它给你任何想法。

EDIT 2:除了在PHP中过滤之外,我能想到的唯一其他方法是自定义sql查询,然后设置post数据。例如:

$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

SO网友:Rajeev Vyas

首先,你只会得到最近修改过的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;
    }

}

SO网友:timDesain

将此代码放入单个自定义post类型的循环中

$attachments = get_posts( array(
    \'post_parent\'       => get_the_ID(),
    \'post_type\'         => \'attachment\',
    \'post_mime_type\'    => \'image\',
    \'orderby\'           => \'menu_order\',
    \'order\'             => \'DESC\',
    \'posts_per_page\'    => -1
) );

if ( $attachments ) {
    foreach ( $attachments as $attachment ) {
        $attID     = $attachment->ID;
        echo \'<a href="\'.wp_get_attachment_url( $attID ).\'" alt="\'.apply_filters( \'the_title\', $attachment->post_title ).\'" class="att-item">\'.wp_get_attachment_image( $attID, \'thumbnail\' ).\'</a>\';
    }
}

结束

相关推荐

where is images/image.jpg?

我被迫在站点上使用SOAP服务,对于一些UI元素,它调用的是我必须放置到位的图像。我无法将它们指向主题文件夹,因为我无法控制HTML,而且我不愿意使用javascript。代码指向<img src=\"images/image.jpg\" >, 我尝试将一个图像文件夹添加到WP安装的根目录中,但没有成功。所以我的问题是,我应该把图像放在哪里,以便HTML可以找到它?