Wordpress 自定义 Post 类型索引分页
Wordpress Custom Post Type Index Pageination
我为名为 'Projects' 的主题创建了自定义 post 类型。在我的项目页面上,我目前使用以下代码在一页上显示所有项目。
<?php
$args = array( 'post_type' => 'bw_projects', 'posts_per_page' => 18 );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
echo '<div class="project p-project" data-filter="">';
echo '<a href="'.get_permalink( $post->ID).'">';
the_post_thumbnail();
echo '</a>';
echo '</div>';
endwhile;
?>
我正在使用 archive-projects.php,它使用的分页与 posts 非常相似。代码如下..
<?php
if ( have_posts() ) :
/* Start the Loop */
while ( have_posts() ) : the_post();
get_template_part( 'template-parts/post/contentp', get_post_format() );
endwhile;
else :
get_template_part( 'template-parts/post/contentp', 'none' );
endif;
?>
<nav>
<ul class="pager">
<li><?php next_posts_link( 'Previous' ); ?></li>
<li><?php previous_posts_link( 'Next' ); ?></li>
</ul>
</nav>
我如何着手创建一个分页的项目主页,而不是仅仅显示所有可用的项目。我会只添加到我现有的数组(示例 1)还是有一个我应该使用的特定模板,例如(home-projects.php)?
您好,检查下面的分页代码。
<?php
global $wp_query;
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$args = array('post_type' => 'bw_projects', 'posts_per_page' => 5, 'paged' => $paged);
$wp_query = new WP_Query($args); ?>
<?php if ( $wp_query->have_posts() ) : ?>
<?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
<h2><?php the_title(); ?></h2>
<?php endwhile; ?>
<div class="pagination">
<?php previous_posts_link( 'New projects;' ); ?>
<?php next_posts_link('Old projects;') ?>
</div>
<?php wp_reset_postdata(); ?>
<?php else: ?>
<p><?php _e( 'No results' ); ?></p>
<?php endif; ?>
<?php wp_reset_query(); ?>
按照 codex 试试这个:
将 "paged" 参数添加到查询
如果 WP_Query 正在改变主循环并且未设置 "paged" 参数,您需要使用 get_query_var()
添加它。这样 WordPress 就可以确切地知道它在哪个页面上。
例如,如果您的查询如下所示(没有 "paged" 参数):
<?php $the_query = new WP_Query( 'posts_per_page=3' ); ?>
你这样添加参数:
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$the_query = new WP_Query( 'posts_per_page=3&paged=' . $paged );
?>
下一个例子与上面完全相同,但参数在一个数组中:
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
'posts_per_page' => 3,
'paged' => $paged
);
$the_query = new WP_Query( $args );
?>
所以在你的具体情况下,它会是这样的:
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array( 'post_type' => 'bw_projects', 'posts_per_page' => 18, 'paged' => $paged );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
echo '<div class="project p-project" data-filter="">';
echo '<a href="'.get_permalink( $post->ID).'">';
the_post_thumbnail();
echo '</a>';
echo '</div>';
endwhile;
?>
添加分页后,重置循环可能也是个好主意,以便 return WP 到物理页面(而不是您的档案列表)。你可以这样做:
<?php wp_reset_postdata(); ?>
我为名为 'Projects' 的主题创建了自定义 post 类型。在我的项目页面上,我目前使用以下代码在一页上显示所有项目。
<?php
$args = array( 'post_type' => 'bw_projects', 'posts_per_page' => 18 );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
echo '<div class="project p-project" data-filter="">';
echo '<a href="'.get_permalink( $post->ID).'">';
the_post_thumbnail();
echo '</a>';
echo '</div>';
endwhile;
?>
我正在使用 archive-projects.php,它使用的分页与 posts 非常相似。代码如下..
<?php
if ( have_posts() ) :
/* Start the Loop */
while ( have_posts() ) : the_post();
get_template_part( 'template-parts/post/contentp', get_post_format() );
endwhile;
else :
get_template_part( 'template-parts/post/contentp', 'none' );
endif;
?>
<nav>
<ul class="pager">
<li><?php next_posts_link( 'Previous' ); ?></li>
<li><?php previous_posts_link( 'Next' ); ?></li>
</ul>
</nav>
我如何着手创建一个分页的项目主页,而不是仅仅显示所有可用的项目。我会只添加到我现有的数组(示例 1)还是有一个我应该使用的特定模板,例如(home-projects.php)?
您好,检查下面的分页代码。
<?php
global $wp_query;
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$args = array('post_type' => 'bw_projects', 'posts_per_page' => 5, 'paged' => $paged);
$wp_query = new WP_Query($args); ?>
<?php if ( $wp_query->have_posts() ) : ?>
<?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
<h2><?php the_title(); ?></h2>
<?php endwhile; ?>
<div class="pagination">
<?php previous_posts_link( 'New projects;' ); ?>
<?php next_posts_link('Old projects;') ?>
</div>
<?php wp_reset_postdata(); ?>
<?php else: ?>
<p><?php _e( 'No results' ); ?></p>
<?php endif; ?>
<?php wp_reset_query(); ?>
按照 codex 试试这个:
将 "paged" 参数添加到查询
如果 WP_Query 正在改变主循环并且未设置 "paged" 参数,您需要使用 get_query_var()
添加它。这样 WordPress 就可以确切地知道它在哪个页面上。
例如,如果您的查询如下所示(没有 "paged" 参数):
<?php $the_query = new WP_Query( 'posts_per_page=3' ); ?>
你这样添加参数:
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$the_query = new WP_Query( 'posts_per_page=3&paged=' . $paged );
?>
下一个例子与上面完全相同,但参数在一个数组中:
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
'posts_per_page' => 3,
'paged' => $paged
);
$the_query = new WP_Query( $args );
?>
所以在你的具体情况下,它会是这样的:
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array( 'post_type' => 'bw_projects', 'posts_per_page' => 18, 'paged' => $paged );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
echo '<div class="project p-project" data-filter="">';
echo '<a href="'.get_permalink( $post->ID).'">';
the_post_thumbnail();
echo '</a>';
echo '</div>';
endwhile;
?>
添加分页后,重置循环可能也是个好主意,以便 return WP 到物理页面(而不是您的档案列表)。你可以这样做:
<?php wp_reset_postdata(); ?>