我正在搜索一种解决方案,为具有特定分类法的自定义帖子类型显示网格,该分类法在一个页面上显示最新的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\' => __(\'«\'),
\'next_text\' => __(\'»\'),
\'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>";
}
}
最合适的回答,由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\' )