如何让WordPress分类页和标签页也能显示全部顶置文章

方法技巧 |  103人已阅 | 字体大小: 默认
本文共计2444个汉字和字符,阅读时长预计9分钟左右。


大家都知道WordPress本来就有文章顶置的功能,只不过这个顶置功能只在首页文章顶部显示,而其它如分类页、标签页就无法让顶置的文章在顶部位置显示了,只能按默认的顺序显示。
首先说如何在顶置文章的标题前面显示“顶置”这两个字标签呢?一句代码就能实现:


<?php if ( is_sticky() ) {echo "<span>顶置</span>";}?>

把上面这句代码添加到文章输出标题的代码前面即可,一般是放在<a href=""><?php the_title(); ?></a>前面,意思是:如果这是一篇置顶文章,则输出“置顶”文字。<span> 就是给顶置设置样式,自个脑部想要的样式。

下面就是说到如何让分类页和标签页也能显示全部顶置文章了,把下面这段代码放到函数模板functions.php中就能实现效果了


add_filter('the_posts',  'putStickyOnTop' );
function putStickyOnTop( $posts ) {
  if(is_home() || !is_main_query() || !is_archive())
    return $posts; 
  global $wp_query;
  $sticky_posts = get_option('sticky_posts');  
  if ( $wp_query->query_vars['paged'] <= 1 && !empty($sticky_posts) && is_array($sticky_posts) && !get_query_var('ignore_sticky_posts') ) {
    $stickies1 = get_posts( array( 'post__in' => $sticky_posts ) );
    foreach ( $stickies1 as $sticky_post1 ) {
      if($wp_query->is_category == 1 && !has_category($wp_query->query_vars['cat'], $sticky_post1->ID)) {
        $offset1 = array_search($sticky_post1->ID, $sticky_posts);
        unset( $sticky_posts[$offset1] );
      }
      if($wp_query->is_tag == 1 && !has_tag($wp_query->query_vars['tag'], $sticky_post1->ID)) {
        $offset1 = array_search($sticky_post1->ID, $sticky_posts);
        unset( $sticky_posts[$offset1] );
      }
      if($wp_query->is_year == 1 && date_i18n('Y', strtotime($sticky_post1->post_date))!=$wp_query->query['m']) {
        $offset1 = array_search($sticky_post1->ID, $sticky_posts);
        unset( $sticky_posts[$offset1] );
      }
      if($wp_query->is_month == 1 && date_i18n('Ym', strtotime($sticky_post1->post_date))!=$wp_query->query['m']) {
        $offset1 = array_search($sticky_post1->ID, $sticky_posts);
        unset( $sticky_posts[$offset1] );
      }
      if($wp_query->is_day == 1 && date_i18n('Ymd', strtotime($sticky_post1->post_date))!=$wp_query->query['m']) {
        $offset1 = array_search($sticky_post1->ID, $sticky_posts);
        unset( $sticky_posts[$offset1] );
      }
      if($wp_query->is_author == 1 && $sticky_post1->post_author != $wp_query->query_vars['author']) {
        $offset1 = array_search($sticky_post1->ID, $sticky_posts);
        unset( $sticky_posts[$offset1] );
      }
    }
    $num_posts = count($posts);
    $sticky_offset = 0;
    for ( $i = 0; $i < $num_posts; $i++ ) {
      if ( in_array($posts[$i]->ID, $sticky_posts) ) {
        $sticky_post = $posts[$i];
        array_splice($posts, $i, 1);
        array_splice($posts, $sticky_offset, 0, array($sticky_post));
        $sticky_offset++;
        $offset = array_search($sticky_post->ID, $sticky_posts);
        unset( $sticky_posts[$offset] );
      }
    }
    if ( !empty($sticky_posts) && !empty($wp_query->query_vars['post__not_in'] ) )
      $sticky_posts = array_diff($sticky_posts, $wp_query->query_vars['post__not_in']);
    if ( !empty($sticky_posts) ) {
      $stickies = get_posts( array(
        'post__in' => $sticky_posts,
        'post_type' => $wp_query->query_vars['post_type'],
        'post_status' => 'publish',
        'nopaging' => true
      ) );

      foreach ( $stickies as $sticky_post ) {
        array_splice( $posts, $sticky_offset, 0, array( $sticky_post ) );
        $sticky_offset++;
      }
    }
  }
  return $posts;
}

赶快去试试吧。

文章标签:
如需转载或复制本文请附带上 本文超链接 并注明出处: CHANBEE
本文标题: 如何让WordPress分类页和标签页也能显示全部顶置文章
本文链接: https://www.chanbee.com/how-to-make-the-wordpress-category-page-and-tab-page-display-all-the-top-articles.html
发布日期: 2020-02-22
您可以分享本文到以下社交:

上一篇:

下一篇:

相关文章推荐

  • 让WordPress后台文章列表按最新修改来排序

  • 给WordPress文章列表页任意文章之间插入任何内容

  • 纯代码让WordPress显示最新评论的文章

  • 通过WordPress数据库SQL批量修改文章内容

  • 返回
    顶部