0

首先 - 这是一个主要关于循环™的问题。我也遇到了附件问题,但这在某种程度上是次要的,因为那里有我认为可能有用的片段。

好的,所以这是我想要在首页中执行的操作:

  • 从自定义帖子类型“投资组合”中获得 7 个帖子
  • 只有第一个,获得一个特定的附件(以任何可能的方式,无论是文件名,媒体管理器中的顺序......无论是最好的,更干净的方式)
  • 与其他 6 个一起,只需获取 the_post_thumbnail() 等等。

现在,我有这个:

<?php
$args = array (
'post_type' => 'portfolio',
'order' => 'DESC',
'posts_per_page' => 7
);

$query = new WP_Query( $args );
$first_post = true; /* we will take the latest work first */
?>

<?php if ( $query->have_posts() ) : ?>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>

<?php
if ($first_post):
$first_post = false;
?>

    <div> /* This is the div for the first item */
            <?php /* let's take the first attachment */
            $args = array(
                'post_type' => 'attachment',
                'numberposts' => 1,
                'order' => 'DESC'
                );

            $attachments = get_posts( $args );
            if ( $attachments ) :
                foreach ( $attachments as $attachment ) :
                   echo wp_get_attachment_image( $attachment->ID, 'full' );
                endforeach;
            endif;
            ?>
        </div>
<?php else: ?>
    /* Do something with the other 6 posts and their post_thumbnail */
<?php endif ?>
<?php endwhile; ?>

现在的问题:

  • 首先也是最重要的:如果我在尝试恢复附件时将“numberposts”设置为全部 (-1),我会从所有“投资组合”帖子中获取所有附件。我不应该只与当前帖子(the_post())进行交互吗?我不能完全掌握循环的概念,这是主要问题。

  • 该代码不会让我获得第一个附件,即使它放在该帖子的媒体管理器中的第一位。

我应该选择二级循环还是嵌套循环?我已经阅读并重新阅读了法典和其他教程,但仍然无法理解它。

非常感谢!

4

2 回答 2

0

使用此代码:

$attachments = get_posts( array(
            'post_type' => 'attachment',
            'posts_per_page' => -1,
            'post_parent' => $post->ID,
            'exclude'     => get_post_thumbnail_id()
        ) );

        if ( $attachments ) {
            foreach ( $attachments as $attachment ) {
                $class = "post-attachment mime-" . sanitize_title( $attachment->post_mime_type );
                $thumbimg = wp_get_attachment_link( $attachment->ID, 'thumbnail-size', true );
                echo $thumbimg;
            }

        }
于 2013-10-03T08:48:45.987 回答
0

用户 Shakti Patel 给了我答案的关键,但并没有真正回答我关于循环的问题,所以这里是:

问题出在get_posts. 它实际上对主查询运行并行查询,而不考虑循环的当前步骤。所以我们必须向它询问当前帖子的附件,因为我们处于循环中,所以附件存储在$post->ID. 所以知道了这一点,我们必须像这样请求当前帖子的第一个附件:

$args = array(
    'post_type' => 'attachment',
    'posts_per_page' => 1,
    'post_parent' => $post->ID,
    'exclude'     => get_post_thumbnail_id()
    );

$attachments = get_posts( $args );

这样我们就可以指定我们将从哪个帖子中获取第一个附件,并且当我们在上面时,排除帖子缩略图。

我不知道这是否是最好的方法,因为我们已经在循环中并且我们不应该需要新的查询,我们不应该能够在没有get_posts位的情况下检索该附件吗?

无论如何,有关get_posts(未半睡时阅读)的更多信息:http: //codex.wordpress.org/Template_Tags/get_posts

于 2013-10-03T09:53:52.253 回答