如何让WP-Paginate支持自定循环的分页功能?

WP-Paginate是一款简单灵活的分页插件,可以提高网站的用户体验度。因为在Wordpress官网上,此插件的作者已经超过2年没有更新了,所以对于如何用于自定义循环中的分页,默认的代码不能实现。经过网上查询和测试,总算让WP-Paginate支持自定义循环的分页。

wp-pagination

在官网上下载WP-Paginate压缩包后,解压后打开wp-paginate.php:
1,找到115-134行的代码:
                   if ($this->type === ‘posts’) {
$page = get_query_var(‘paged’);
$posts_per_page = intval(get_query_var(‘posts_per_page’));
$pages = intval(ceil($wp_query->found_posts / $posts_per_page));
}
else {
$page = get_query_var(‘cpage’);
$comments_per_page = get_option(‘comments_per_page’);
$pages = get_comment_pages_count();
}
$page = !empty($page) ? intval($page) : 1;
}

$prevlink = ($this->type === ‘posts’)
? esc_url(get_pagenum_link($page �C 1))
: get_comments_pagenum_link($page �C 1);
$nextlink = ($this->type === ‘posts’)
? esc_url(get_pagenum_link($page + 1))
: get_comments_pagenum_link($page + 1);

替换为:
               if($args['query_type'] == ‘custom’) {
$page = (get_query_var(‘page’)) ? get_query_var(‘page’) : 1;
$posts_per_page = intval(get_query_var(‘posts_per_page’));
$pages = intval(ceil($args['query']->found_posts / $posts_per_page));
} else {
if ($this->type === ‘posts’) {
$page = get_query_var(‘paged’);
$posts_per_page = intval(get_query_var(‘posts_per_page’));
$pages = intval(ceil($wp_query->found_posts / $posts_per_page));
}
else {
$page = get_query_var(‘cpage’);
$comments_per_page = get_option(‘comments_per_page’);
$pages = get_comment_pages_count();
}
}
$page = !empty($page) ? intval($page) : 1;
}
if($args['query_type'] == ‘custom’) {
$prevlink = esc_url(get_pagenum_link($page �C 1));
$nextlink = esc_url(get_pagenum_link($page + 1));
} else {
$prevlink = ($this->type === ‘posts’)
? esc_url(get_pagenum_link($page �C 1))
: get_comments_pagenum_link($page �C 1);
$nextlink = ($this->type === ‘posts’)
? esc_url(get_pagenum_link($page + 1))
: get_comments_pagenum_link($page + 1);
}

2,找到205行左右开始的代码:
$output .= ($page == intval($i))
? “<li><span class=’page current’>$i</span></li>”
: “<li><a href=’$p’ title=’$i’ class=’page’>$i</a></li>”;

替换为:
//                 $output .= ($page == intval($i))
//                     ? “<li><span class=’page current’>$i</span></li>”
//                     : “<li><a href=’$p’ title=’$i’ class=’page’>$i</a></li>”;
$output .= “<li><a href=’$p’ title=’$i’ class=’page’>$i</a></li>”;

3,保持wp-paginate.php并将wp-paginate整个文件夹上传到wp-content/plugins文件夹里,在wordpress后台插件管理里面启用。

4,修改自定义循环代码,可以在插件文件或模板functions.php文件里面添加下面这个函数:
function hofire_query_loop_posts($post_type) {
$paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1;
$args = array(
‘post_type’ => array( $post_type ),
‘paged’=>$paged
);
$query = new WP_Query( $args );
return $query;
}

注意:$paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1; 如果不加此行代码,那分页的功能将不能工作。

5,在模板文件里面添加WP-Paginate分页的代码:
默认的分页代码是这样的:
<?php if(function_exists(‘wp_paginate’)) {
wp_paginate();
} ?>

如果当前循环是自定义查询的,同时查询的post类型为自定义的,就用下面的代码:
   <?php $post_customize_loop = hofire_query_loop_posts($post_type); ?>
<?php if(function_exists(‘wp_paginate’)) {
wp_paginate(array(‘query_type’ => ‘custom’, ‘query’ => $post_customize_loop));
} ?>

根据上面的步骤,就可以在wordpress程序上实现自定义循环的分页功能了。

可以通过官网下载WP-Paginate来对应修改,也可以点击下面的链接,直接下载Hofire修改后的WP-Paginate版本进行安装使用。

原文地址:http://www.hofire.com/blog/wordpress/ru-he-rang-wp-paginate-zhi-chi-zi-ding-xun-huan-de-fen-ye-gong-neng.html

关注Hofire微信公共平台:hihofire

wKioL1LXT7LjpSfVAAEGfZM0KpU725.jpg

你可能感兴趣的:(wordpress,插件开发,wordpress分页功能,wordpress开发)