wordpress自定义帖子类型无法改变显示顺序

时间:2012-05-28 17:03:05

标签: wordpress custom-post-type

我已经创建了一个自定义帖子类型,可以在我的投资组合网站上的博客中手工制作摘录。我有一个内容窗口,一个链接和一个帖子类型的特色图片,我称之为blog

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

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

但我也尝试过更精细的查询,例如:

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

我的完整模板文件如下: `            “&GT;                  

    <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 } ?>

`

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

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

2 个答案:

答案 0 :(得分:1)

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

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

最后,默认顺序按日期降序排列(从最新到最旧),因此理论上你甚至不需要定义顺序和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>

答案 1 :(得分: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; ?>

`

所以我打算给出答案,因为它解决了我遇到的问题。谢谢!