我试图在我的自定义wordpress主题中创建一个分页,但我无法解决问题。基本上我所拥有的是一个名为" Portfolio Page"的自定义页面模板。它位于page-portfolio.php
,我每页最多显示5个帖子。
当我点击转到包含较旧或较新帖子的下一页时,我会转到portfolio/page/page-number-here/
的网址,而原始网址为portfolio/
,其中包含所有标记和内容。当网址不再位于portfolio/
时,这会导致所有标记和样式消失。如何使旧版或新版帖子加载到同一模板中?
我一直在搜索手抄本并支持答案,但我甚至找不到其他有此问题的人。我很确定我错过了导致这种情况发生的重要事情。
这是我的page-portfolio.php
:
<?php /* Template Name: Portfolio Page */ ?>
<?php get_header(); ?>
<?php
$num_posts = ( is_front_page() ) ? 1 : 5;
$args = array(
'post_type' => 'portfolio',
'posts_per_page' => $num_posts
);
$query = new WP_Query( $args );
?>
<section id="portfolio-wrapper">
<ul id="portfolio-list" class="list-reset">
<?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
<li class="clear-fix portfolio-piece">
<h1 class="portfolio-piece-title"><?php the_title(); ?></h1>
<div class="portfolio-piece-gallery"><?php the_field('images'); ?></div>
<div class="portfolio-piece-content"><?php the_content(); ?></div>
</li>
<?php endwhile; ?>
</ul>
<div class="pagination-wrapper">
<?php
if ( function_exists( 'pagination' ) ) {
pagination( $query->max_num_pages );
}
?>
<?php endif; wp_reset_postdata(); ?>
</div>
</section>
<?php get_footer(); ?>
我正在使用看似这样的分页功能:
function pagination( $pages = '', $range = 4 ) {
$showitems = ( $range * 2 ) + 1;
global $paged;
if ( empty( $paged ) ) {
$paged = 1;
}
if ( $pages == '' ) {
global $wp_query;
$pages = $wp_query->max_num_pages;
if ( !$pages ) {
$pages = 1;
}
}
if ( 1 != $pages ) {
echo "<div class=\"pagination\"><span>Page ".$paged." of ".$pages."</span>";
if ( $paged > 2 && $paged > $range+1 && $showitems < $pages) {
echo "<a href='".get_pagenum_link( 1 )."'>« First</a>";
}
if ( $paged > 1 && $showitems < $pages ) {
echo "<a href='".get_pagenum_link( $paged - 1 )."'>‹ Previous</a>";
}
for ( $i = 1; $i <= $pages; $i++ ) {
if ( 1 != $pages &&( !( $i >= $paged + $range + 1 || $i <= $paged - $range - 1 ) || $pages <= $showitems ) ) {
echo ( $paged == $i ) ? "<span class=\"current\">".$i."</span>":"<a href='".get_pagenum_link( $i )."' class=\"inactive\">".$i."</a>";
}
}
if ( $paged < $pages && $showitems < $pages) {
echo "<a href=\"".get_pagenum_link( $paged + 1 )."\">Next ›</a>";
}
if ($paged < $pages - 1 && $paged + $range - 1 < $pages && $showitems < $pages) {
echo "<a href='".get_pagenum_link($pages)."'>Last »</a>";
}
echo "</div>\n";
}
}
答案 0 :(得分:0)
有一些问题可能会导致您遇到的问题。首先,它是wordpress中一个记录良好的问题,让页面和帖子类型共享相同的slug - &#39;投资组合&#39;在你的情况下。由于您使用自定义模板而不是此帖子类型的归档模板,因此一个简单的解决方法是在注册时禁用投资组合帖子类型的归档 -
'has_archive' => false
https://codex.wordpress.org/Function_Reference/register_post_type
我还会通过重新保存永久链接设置来更改此重写规则,以确保这不会导致任何问题。
此外,如果您在查询中不包含分页变量,则分页将无法正常工作。首先声明它,然后包含在您的查询中:
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$args = array(
'post_type' => 'portfolio',
'posts_per_page' => $num_posts,
'paged' => $paged,
);
$query = new WP_Query( $args );
https://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters