Php WordPress从循环外的X类别中获得每个帖子1个附件

Php WordPress从循环外的X类别中获得每个帖子1个附件,php,wordpress,attachment,Php,Wordpress,Attachment,希望有人能帮上忙。我想要的是在侧边栏中显示5个附件,但每个特定类别的帖子只显示1个附件,侧边栏链接到posts permalink 到目前为止,我正在使用以下代码从所有帖子中获取所有附件,但有些帖子有不止一个附件,我只想显示第一个,并将其链接到帖子的永久链接 因此,尽管限制是5篇文章,如果一篇文章有4个附件,那么当前它将显示一篇文章中的4篇,另一篇文章中的1篇,总共5篇,而我希望它只显示5篇不同文章中的1篇 <?php $args = array( 'post_type' =&g

希望有人能帮上忙。我想要的是在侧边栏中显示5个附件,但每个特定类别的帖子只显示1个附件,侧边栏链接到posts permalink

到目前为止,我正在使用以下代码从所有帖子中获取所有附件,但有些帖子有不止一个附件,我只想显示第一个,并将其链接到帖子的永久链接

因此,尽管限制是5篇文章,如果一篇文章有4个附件,那么当前它将显示一篇文章中的4篇,另一篇文章中的1篇,总共5篇,而我希望它只显示5篇不同文章中的1篇

<?php

$args = array(
    'post_type' => 'attachment',
    'numberposts' => 5,
    'post_status' => null,
    'post_parent' => null, // any parent
    'category_name' => 'work',
    );
$attachments = get_posts($args);
if ($attachments) {
    foreach ($attachments as $post) {
        setup_postdata($post);
        the_title();
        the_permalink();
        the_attachment_link($post->ID, false);
        the_excerpt();
    }
}

?>

干杯。
Dave

好吧,我尝试了一下,我真的认为没有任何优雅的方式不使用自定义查询

$attachment_IDs = $wpdb->get_col(
    "SELECT ID FROM $wpdb->posts WHERE
        post_parent > 0 AND
        post_type = 'attachment'
    GROUP BY post_parent
    ORDER BY post_date DESC
    LIMIT 5"
);

if ($attachment_IDs) {
    $attachments = get_posts(array('include' => implode(',', $attachment_IDs)));
    // do what you like!
}
该查询获取最近的五个附件,其中每个附件都有一个唯一的父级

更新:

抱歉,刚刚意识到你也想按类别查询-在选择后添加这个大的旧加入

INNER JOIN $wpdb->term_relationships ON
    ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
INNER JOIN $wpdb->term_taxonomy ON
    ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
并将其添加到WHERE条款中

AND $wpdb->term_taxonomy.term_id IN (YOUR_CATEGORY_ID)

为此干杯。我还没有对它进行测试,但是我使用下面的代码成功地使它工作。无论如何,我都不是一个铁杆PHP程序员,所以我不确定哪种方法是最好的。我现在所知道的是,我所做的似乎是有效的

<?php query_posts('category_name=work&posts_per_page=10'); ?>
                    <?php while (have_posts()) : the_post(); ?>
                        <?php
                        $args = array(
                            'order'          => 'ASC',
                            'post_type'      => 'attachment',
                            'post_parent'    => $post->ID,
                            'post_mime_type' => 'image',
                            'post_status'    => null,
                            'numberposts'    => 1,
                        );
                        $attachments = get_posts($args);
                        if ($attachments) {
                            foreach ($attachments as $attachment) {
                                //echo apply_filters('post_title', $attachment->post_title);
                                echo "<li><a href='";
                                echo the_permalink();
                                echo "' title='";
                                echo the_title();
                                echo "'>";
                                echo wp_get_attachment_image($attachment->ID, 'thumbnail', false, false);
                                echo "</a></li>";
                            }
                        }
                        ?>
                    <?php endwhile;?>

谢谢你试一下

戴夫