从具有特定分类的特定自定义帖子类型创建自定义wp_Query

时间:2017-09-29 作者:Valentin R.

我正在搜索一种解决方案,为具有特定分类法的自定义帖子类型显示网格,该分类法在一个页面上显示最新的4篇帖子(可以是自定义子主题中的模板页面),然后在另一个页面模板上显示接下来的4篇帖子。

我需要4个不同的页面来显示16篇文章,每页包含4篇文章。第一页=最新的4篇文章,第二页接下来的4篇文章,第三页接下来的4篇文章来自第2页,第四页显示第3页接下来的4篇文章。

我确实成功地显示了最近的4篇帖子,但我一直在想如何在另一个页面上显示接下来的4篇帖子。

使用此代码创建了此列表的分页版本,是否有任何方法可以复制第2页的相同模板,并在第二步分页时直接显示页面?我的目标是制作4个不同的页面。如果有其他方法,我感谢任何能为我指明正确方向的人,让我学会如何做到这一点。

非常感谢,如果问题模棱两可,请随时询问解释。

    <?php
/**
 * Template Name: Custom Query page 01
 * The custom page template file
 */
?>

<?php get_header(); ?>

<h2>List the first 4 posts</h2>

<?php 

  $paged = ( get_query_var(\'paged\') ) ? get_query_var(\'paged\') : 1;

  $custom_args = array(
      \'post_type\' => \'listings\',
      \'tax_query\' => array(
        array(
            \'taxonomy\' => \'custom_taxonomy\',
            \'field\' => \'slug\',
            \'terms\' => $custom_term->slug,
        ),
    ),
      \'posts_per_page\' => 4,
      \'paged\' => $paged
    );

  $custom_query = new WP_Query( $custom_args ); ?>

  <?php if ( $custom_query->have_posts() ) : ?>

    <!-- the loop -->
    <?php while ( $custom_query->have_posts() ) : $custom_query->the_post(); ?>
      <article class="loop">
        <h3><?php the_title(); ?></h3>
        <div class="content">
          <?php the_excerpt(); ?>
        </div>
      </article>
    <?php endwhile; ?>
    <!-- end of the loop -->

    <!-- pagination here -->
    <?php
      if (function_exists(custom_pagination)) {
        custom_pagination($custom_query->max_num_pages,"",$paged);
      }
    ?>

  <?php wp_reset_postdata(); ?>

  <?php else:  ?>
    <p><?php _e( \'Sorry, no posts matched your criteria.\' ); ?></p>
  <?php endif; ?>

<?php get_footer(); ?>
进行分页的函数(我添加到functions.php中):

function custom_pagination($numpages = \'\', $pagerange = \'\', $paged=\'\') {

  if (empty($pagerange)) {
    $pagerange = 4 ;
  }

  global $paged;
  if (empty($paged)) {
    $paged = 1;
  }
  if ($numpages == \'\') {
    global $wp_query;
    $numpages = $wp_query->max_num_pages;
    if(!$numpages) {
        $numpages = 1;
    }
  }

  /** 
  * Construct of the pagination arguments to enter into paginate_links       */
  $pagination_args = array(
    \'base\'            => get_pagenum_link(1) . \'%_%\',
    \'format\'          => \'page/%#%\',
    \'total\'           => $numpages,
    \'current\'         => $paged,
    \'show_all\'        => False,
    \'end_size\'        => 1,
    \'mid_size\'        => $pagerange,
    \'prev_next\'       => True,
    \'prev_text\'       => __(\'&laquo;\'),
    \'next_text\'       => __(\'&raquo;\'),
    \'type\'            => \'plain\',
    \'add_args\'        => false,
    \'add_fragment\'    => \'\'
  );

  $paginate_links = paginate_links($pagination_args);

  if ($paginate_links) {
    echo "<nav class=\'custom-pagination\'>";
      echo "<span class=\'page-numbers page-num\'>Page " . $paged . " of " . $numpages . "</span> ";
      echo $paginate_links;
    echo "</nav>";
  }
}

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

当有人试图创建自定义循环时,我经常看到这样的页面模板,这可能是受内置功能的启发,即当另一个页面被设置为站点的首页时,创建一个页面作为帖子的存根。这是一种特殊情况,而不是人们应该做的事情。

您应该做的是创建taxonomy-custom_taxonomy.php 以及更改默认值WP_Query 在通过挂钩发送到DB之前pre_get_posts 以获得您想要的结果。下面是您希望在子主题的函数中使用的函数类型。php:

add_action( \'pre_get_posts\', \'wpse281501_taxonomy_query\' );

function wpse281501_taxonomy_query($query) {
    if($query->is_main_query() && $query->is_tax( \'custom_taxonomy\' ) {
        $query->set( \'posts_per_page\', 4 );
    }
}
默认情况下,分类法归档支持分页,而页面模板需要中的kluding支持,因为页面没有分页。

如果只想将此布局应用于分类法中的特定术语,则需要调用模板taxonomy-custom_taxonomy-custom_term.php 并将该项作为第二个参数传递给is_tax() 在挂钩函数中:

if($query->is_main_query() && $query->is_tax( \'custom_taxonomy\', \'custom_term\' )

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post