我已经创建了一个自定义帖子类型,可以在我的投资组合网站上的博客中手工制作摘录。我有一个内容窗口,一个链接和一个帖子类型的特色图片,我称之为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 »', 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 »', THEMENAME)); ?>
</div>
<?php endwhile; else: ?>
<p><?php _e('Nothing found.', THEMENAME); ?></p>
<?php endif; ?>
</div>
</div>
<!-- content end -->
<?php } ?>
`
所以我正在显示应用此模板的页面中的内容,然后我显示自定义帖子类型。
感谢您的帮助,我很难过!
答案 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 »', 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; ?>
`
所以我打算给出答案,因为它解决了我遇到的问题。谢谢!