0

我创建了一个自定义帖子类型,用于从我的投资组合网站上的博客中手工摘录。我有一个内容窗口、一个链接和一个帖子类型的特色图片,我称之为blog.

问题是,无论我尝试什么,帖子都会从最旧到最新显示,而我想先显示最新的。这是query_posts()电话:

<?php query_posts( 'post_type=blog&order=ASC'); ?>

但我也尝试过更复杂的查询,例如:

<?php query_posts(array('post_type' => 'blog', 'orderby'=>'date','order'=>'ASC')); ?>

我的完整模板文件如下所示:` ">

    <div class="sliderContent">
        <!--first loop-->
        <?php if (have_posts()) : while (have_posts()) : the_post(); ?> 
        <?php the_content(__('Read More &raquo;', THEMENAME)); ?>
        <?php endwhile; else: ?>
        <p><?php _e('Nothing found.', THEMENAME); ?></p>
        <?php endif; ?>

        <!--second loop, displays custom post type-->
        <?php query_posts(array('post_type' => 'blog', 'orderby'=>'date','order'=>'ASC') ); ?>
        <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
        <div class="contenttile">
            <p><a href="<?php echo get_post_meta($post->ID, 'Permalink', true); ?>"><?php the_post_thumbnail('medium'); ?></a></p>
            <h2><?php the_title(); ?></h2>

            <?php the_content(__('Read More &raquo;', THEMENAME)); ?>
        </div>
        <?php endwhile; else: ?>
        <p><?php _e('Nothing found.', THEMENAME); ?></p>
        <?php endif; ?>
    </div>
</div>
<!-- content end -->

<?php } ?>

`

因此,我将显示应用此模板的页面中的内容,然后显示我的自定义帖子类型。

感谢您的帮助,我很难过!

4

2 回答 2

1

您的查询按升序排列。升序是从最旧到最新。如果您想要最新到最旧,则需要 DESCENDING 顺序。此外,您应该尽可能避免使用 query_posts,因为它会修改默认的 Wordpress 循环。

您的第二个查询并不比第一个更复杂。唯一的区别是您使用数组而不是字符串来定义查询参数(数组可以说是正确的方法),并且您正在设置 orderby 参数。

最后,默认顺序是按日期降序排列(从最新到最旧),因此理论上您甚至不需要定义 order 和 orderby 参数。

尝试这个:

    <!--second loop, displays custom post type-->
    <?php
    $args = array('post_type' => 'blog', 'orderby'=>'date','order'=>'DESC');
    /*Consider changing to: $args = array('post_type' => 'blog');*/
    $query = new WP_Query($args);
    if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post();
    ?>
    <div class="contenttile">
        <p><a href="<?php echo get_post_meta($post->ID, 'Permalink', true); ?>"><?php the_post_thumbnail('medium'); ?></a></p>
        <h2><?php the_title(); ?></h2>

        <?php the_content(__('Read More &raquo;', THEMENAME)); ?>
    </div>
    <?php endwhile; else: ?>
    <p><?php _e('Nothing found.', THEMENAME); ?></p>
    <?php
    endif;
    wp_reset_postdata();
    ?>
</div>

于 2012-05-28T17:52:09.387 回答
0

好吧,正如majorano84所暗示的那样,在进一步阅读之后query_posts()根本就不是正确的功能(因为我猜它为服务器带来了更多的工作?)

相反,我使用了 get_posts(),它以首选顺序显示帖子,而无需我做任何进一步的努力:

        <?php
            $args = array( 'post_type' => 'blog' );
            $lastposts = get_posts( $args );
            foreach($lastposts as $post) : setup_postdata($post); ?>
                <div class="contenttile">
                        <p><a href="<?php echo get_post_meta($post->ID, 'Permalink', true); ?>"><?php the_post_thumbnail('medium'); ?></a></p>
                        <h2><?php the_title(); ?></h2>
                        <?php the_content(); ?>
                </div>
        <?php endforeach; ?>

`

所以我将把它称为答案,因为它解决了我遇到的问题。谢谢!

于 2012-05-28T18:14:51.607 回答