wordpress置顶文章问题

作者:沙师弟时间:2013-08-16
最近用wordpress做了小站,其中有涉及到置顶文章,查找了很多网站,他们都说用is_sticky()函数来判断是否是置顶文章,但是自从我网站建立以来,置顶文章的排序老是不正常,我是这样写的:
//置顶文章设置
if ( have_posts() ){
//query_posts( $query_string . "order=DESC" );
query_posts( $query_string . "order=DESC" );
$n = 0;
while ( have_posts() && $n<7 && is_sticky() ){ //判断文章是否置顶和限制条数
the_post();
$n++;
if ( $n == 1 ){
echo '<li><h2><a href="'. get_permalink() .'" title="'. get_the_title() .'">';
get_short_title(16);
//echo '<p><data>'.get_the_time('n月j日').'</data></p>';
//get_more_tags(' ', '|' , '');
//comments_popup_link('0 条评论', '1 条评论', '% 条评论', '', '评论已关闭');
echo '</a></h2><p>'. mb_substr(get_the_excerpt(),0,55,"utf8") ."...".'</p></li>';
}else{
echo '<li><span class="fn-left">[';
the_category(' ');
echo ']</span><a href="' . get_permalink() . '" title="' .get_the_title(). '" class="fn-left">';
get_short_title(14);
echo '</a><span class="titleAside fn-right">'. get_the_time('n月j日') .'</span></li>';
}
}
}
最后几条,排序老是出现最早的文章,太奇怪了,今天特意来修复这个bug,换了个写法,直接将
query_posts( $query_string . "order=DESC" );
is_sticky()
去掉,在循环前加入:
query_posts(array('post__in'=>get_option('sticky_posts')));
循环后加入:
wp_reset_query();
下面,贴一下最后的写的结果:
//置顶文章设置
query_posts(array('post__in'=>get_option('sticky_posts')));
if ( have_posts() ){
//query_posts( $query_string . "order=DESC" );
//query_posts('orderby=comment_count');
$n = 0;
while ( have_posts() && $n<7){ //判断文章是否置顶和限制条数
the_post();
$n++;
if ( $n == 1 ){
echo '<li><h2><a href="'. get_permalink() .'" title="'. get_the_title() .'">';
get_short_title(16);
//echo '<p><data>'.get_the_time('n月j日').'</data></p>';
//get_more_tags(' ', '|' , '');
//comments_popup_link('0 条评论', '1 条评论', '% 条评论', '', '评论已关闭');
echo '</a></h2><p>'. mb_substr(get_the_excerpt(),0,55,"utf8") ."...".'</p></li>';
}else{
echo '<li><span class="fn-left">[';
the_category(' ');
echo ']</span><a href="' . get_permalink() . '" title="' .get_the_title(). '" class="fn-left">';
get_short_title(14);
echo '</a><span class="titleAside fn-right">'. get_the_time('n月j日') .'</span></li>';
}
}
wp_reset_query();
}