如何在所属的当前分类页面上显示粘帖或最新发布的帖子?

时间:2022-01-31 作者:PhpDoe

我能做什么:

当当前类别中有粘性帖子时,我已经能够显示它了。当没有粘性帖子时就会出现问题:它不会像应该的那样显示最新的帖子(实际上id不会显示任何内容)。

它就像主页上的一个符咒:当有粘性帖子时,它会显示出来;当没有粘性帖子时,它会显示最新的帖子。

这是我的代码:

<?php
$current_object = get_queried_object_id(); // Get the category ID and store it in a variable

    // Display sticky post or latest post :
    $args = array(
      \'posts_per_page\'      => 1,
      \'post__in\'            => get_option( \'sticky_posts\' ),
      \'cat\'                 => $current_object, // Current category ID 
      \'ignore_sticky_posts\' => true,
    );
    $featured_query = new WP_query( $args );

    if ( $featured_query->have_posts() ) : ?>

      <div class="featured-post">

        <?php
        while ( $featured_query->have_posts() ) :
          $featured_query->the_post();

          the_title(\'<h2>\', \'</h2>\');
          the_excerpt();

        endwhile;
        wp_reset_postdata();
        ?>

      </div>

    <?php endif; ?>

我想要实现的目标:

我希望我的分类页面显示属于该分类的粘性帖子(如果存在),如果没有,我希望分类页面显示该分类中发布的最新帖子。

我错过了什么?

1 个回复
最合适的回答,由SO网友:PhpDoe 整理而成

该代码当然并不完美,但它确实起到了作用:

<?php
// Store the current category ID :
$current_object = get_queried_object_id();

// Get sticky post :
$args = array(
  \'posts_per_page\'      => 1,
  \'post__in\'            => get_option( \'sticky_posts\' ),
  \'cat\'                 => $current_object,
  \'ignore_sticky_posts\' => true,
);
$sticky_query = new WP_query( $args );

// Get latest post :
$args = array(
  \'posts_per_page\'      => 1,
  \'cat\'                 => $current_object,
  \'ignore_sticky_posts\' => true,
);
$latest_query = new WP_query( $args );

// If there is a sticky post in the current category :
if ( $sticky_query->have_posts() ) : ?>

  <div class="sticky-post">

    <?php
    while ( $sticky_query->have_posts() ) :
      $sticky_query->the_post();

      the_title();

    endwhile;
    wp_reset_postdata();
    ?>

  </div>

<?php
// If there is no sticky post, display the latest published post :
elseif ( $latest_query->have_posts() ) : ?>

  <div class="latest-post">

    <?php
    while ( $latest_query->have_posts() ) :
      $latest_query->the_post();
      
      the_title();

    endwhile;
    wp_reset_postdata();
    ?>

  </div>

<?php endif; ?>
这里有两个查询。第一个用于获取和显示属于当前类别的贴子,第二个用于获取和显示同一类别中的最新贴子(如果没有要显示的贴子)。