如何为自定义帖子类型创建 WordPress 分页
已发表: 2020-02-24
为自定义帖子类型创建分页不应该是一个挑战,因为您可以重新利用我们在这里使用的相同想法——如何在 WordPress 中创建自定义查询分页。 我们需要查询自定义帖子类型,然后显示该帖子类型或多个帖子类型中的查询帖子。
在这篇文章中,我将向您展示如何为自定义帖子类型创建 WordPress 分页。 分页将类似于此数字分页。 我们将创建一个自定义查询来获取所有自定义帖子类型,然后使用循环和数字分页显示自定义帖子类型。
创建自定义帖子类型
第一步是使用以下代码创建自定义帖子类型:
/**
* 自定义帖子类型 - register_post_type()
* @description- Njengah 教程自定义帖子类型示例
* @link -https://gist.github.com/Njengah/839466b773085ac2430772e081357cee
*
*/
add_action('init', "njengah_tutorial_cpt");
函数 njengah_tutorial_cpt(){
$标签=数组(
'name' => _x('Tutorials', '帖子类型通用名称'),
'singular_name' => _x('Tutorial', 'post type 单数名称'),
'menu_name' => _x('Tutorials', 'admin menu'),
'name_admin_bar' => _x('Tutorial', 'add new on admin bar'),
'add_new' => _x('新增', ''),
'add_new_item' => __('添加新教程'),
'edit_item' => __('编辑教程'),
'new_item' => __('新教程'),
'all_items' => __('所有教程'),
'view_item' => __('查看教程'),
'search_items' => __('搜索教程'),
'not_found' => __('没有找到教程'),
'not_found_in_trash' => __('没有在垃圾箱中找到教程'),
'parent_item_colon' => __('家长教程:'),
);
$args = 数组(
'分层' => 真的,
'标签' => $标签,
'公共' => 真的,
'publicly_queryable' => 真,
'描述' => __('描述'),
'show_ui' => 真,
'show_in_menu' => 真,
'show_in_nav_menus' => 真,
'query_var' => 真,
'重写' => 真的,
'query_var' => 真,
'rewrite' => array('slug' => 'tutorial'),
'capability_type' => '页面',
'has_archive' => 真,
'menu_position' => 22,
“show_in_rest” => 真,
'supports' => array('title', 'editor', 'author', 'thumbnail', 'comments', 'revisions', 'page-attributes', 'custom-fields' )
);
register_post_type('tutorial', $args);
}将此代码添加到您的 functions.php 文件中,您将看到自定义帖子类型“教程”出现在您的 WordPress 仪表板上。

可以更改此代码以适合您的特定自定义帖子类型。 自定义帖子类型也可以使用自定义帖子类型生成插件创建。
创建页面模板以显示自定义帖子类型
我们需要创建一个自定义页面模板,用于使用 WordPress 循环显示自定义帖子类型。
要创建自定义页面模板,您应该在主题的根文件夹中创建一个新文件。
为文件命名 – custom -page.php或任何其他描述自定义帖子类型的名称,例如,对于在名称上方创建的自定义帖子类型,名称可以是 tutorials-page.php。
在此文件中,使用以下代码添加自定义页面模板的标题并保存更改:
<?php /** * 模板名称:教程模板 */ get_header();
您现在应该看到自定义页面模板在您的页面属性模板选项中可见,如下所示:

创建自定义帖子类型自定义查询
自定义查询是第一步,它将允许我们查询现有的自定义帖子类型并将它们显示在我们在上一步中创建的自定义页面模板上。
以下代码将查询教程自定义帖子类型并检索前两个帖子,然后将它们显示在我们上面创建的自定义页面模板上。
<?php
/**
* 模板名称:教程模板
*/
get_header();
// 第 1 步:创建自定义查询
$paged = (get_query_var('paged')) ? get_query_var(“分页”):1;
$args = 数组(
'posts_per_page' => 2,// 查询最近 2 个帖子
'post_type' => '教程',
'分页' => $分页
);
$customPostQuery = new WP_Query($args);
?>在自定义页面模板中显示教程自定义帖子
以下是将查询自定义帖子类型并将其显示在自定义页面模板上的代码:
<?php
/**
* 模板名称:教程模板
*/
get_header();
// 第 1 步:创建自定义查询
$paged = (get_query_var('paged')) ? get_query_var(“分页”):1;
$args = 数组(
'posts_per_page' => 2,// 查询最近 2 个帖子
'post_type' => '教程',
'分页' => $分页
);
$customPostQuery = new WP_Query($args);
?>
<!-- 步骤2:显示我们在步骤1中查询的帖子-->
<div class="wrap">
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<?php
如果($customPostQuery->have_posts()):
while($customPostQuery->have_posts()) :
$customPostQuery->the_post();
全球 $post;
?>
<div class ="inner-content-wrap">
<ul class ="cq-posts-list">
<li>
<h3 class ="cq-h3"><a href="<?php the_permalink(); ?>" ><?php the_title(); ?></a></h3>
<div>
<ul>
<div>
<a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('thumbnail'); ?></a>
</div>
</ul>
<ul>
<p><?php echo the_content(); ?></p>
</ul>
</div>
</li>
</ul>
</div> <!-- 结束博文-->
<?php 结束;
万一;
wp_reset_query();创建 WordPress 自定义帖子分页功能
在这一步中,我们现在应该创建一个自定义帖子类型分页函数,该函数将添加到主题函数中,并在循环显示自定义帖子类型后调用。

应将以下代码添加到 functions.php 以创建自定义帖子类型分页功能。
// 自定义帖子类型分页功能
函数 cpt_pagination($pages = '', $range = 4)
{
$showitems = ($range * 2)+1;
全局 $paged;
if(空($paged)) $paged = 1;
if($pages == '')
{
全局 $wp_query;
$pages = $wp_query->max_num_pages;
如果(!$页)
{
$pages = 1;
}
}
如果(1!= $页)
{
echo "<nav aria-label='页面导航示例'> <ul 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)."'>‹ 上一个</a>";
对于 ($i=1; $i <= $pages; $i++)
{
if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems ))
{
回声($paged == $i)? "<li class=\"page-item active\"><a class='page-link'>".$i."</a></li>":"<li class='page-item' > <a href='".get_pagenum_link($i)."' class=\"page-link\">".$i."</a></li>";
}
}
if ($paged < $pages && $showitems < $pages) echo " <li class='page-item'><a class='page-link' href=\"".get_pagenum_link($paged + 1)." \">i class='flaticon flaticon-back'></i></a></li>";
if ($paged < $pages-1 && $paged+$range-1 < $pages && $showitems < $pages) echo " <li class='page-item'><a class='page-link' href=' ".get_pagenum_link($pages)."'><i class='flaticon flaticon-arrow'></i></a></li>";
回声“</ul></nav>\n”;
}
}在页面模板中调用自定义帖子类型分页功能
由于我们已经创建了自定义帖子类型分页功能,并且我们已经运行了循环并显示了自定义帖子类型,所以我们现在需要在自定义页面模板的底部添加分页功能,以便我们显示分页。
以下是用于检查自定义后分页功能是否存在的代码,如果存在,我们应该调用它来显示分页
// 第三步:在这里调用分页函数
if (function_exists("cpt_pagination")) {
cpt_pagination($customPostQuery->max_num_pages);
}我们创建了自定义帖子类型,自定义页面模板,添加了自定义帖子类型分页功能,并显示了带有查询的自定义帖子类型和自定义帖子类型分页功能。
自定义帖子类型分页样式
您需要使用以下代码将样式添加到自定义帖子类型分页:
/**
*自定义帖子类型分页样式
* @作者乔恩杰加
*/
.分页{
明确:两者;
位置:相对;
字体大小:16px;
行高:13px;
浮动:对;
列表样式类型:无;
宽度:100%
}
.pagination 跨度,.pagination 一个 {
显示:块;
向左飘浮;
边距:2px 2px 2px 0;
填充:6px 9px 5px 9px;
文字装饰:无;
宽度:自动;
颜色:#fff;
背景:#237697;
}
.分页:悬停{
颜色:#fff;
背景:#000;
}
.分页 .current{
填充:6px 9px 5px 9px;
背景:#999;
颜色:#fff;我们准备好查看这段代码的结果。 要查看自定义帖子类型分页,您需要使用我们在第二步中创建的自定义页面模板创建一个新页面。

创建此页面后,您应该会看到该页面显示了我们查询的自定义帖子类型和我们创建的分页,如下图所示:

最后的想法
要创建自定义帖子类型分页,您需要创建自定义页面模板,添加自定义查询以获取您要显示的所有自定义帖子并调用您添加到 functions.php 的自定义分页函数。 为了获得完整的代码,我已将其添加到 git 存储库中,您可以在此处访问它——WordPress 自定义帖子类型分页。
