我看了这篇关于为什么在互联网上分页很奇怪的演讲。https://speakerdeck.com/u/espylaub/p/pagination-on-the-internet-and-why-its-weird这启发了我尝试制作一个WordPress插件来实现这一点。这是我到目前为止得到的。。。
<?php
/*
Plugin Name: Reverse Pagination
Description: Pagination starts higher and goes lower for more consistent archive page numbering.
Author: Russell Heimlich
Version: 0.1
*/
function reverse_pagination_pre_get_posts($t) {
$q = $t->query_vars;
if ( empty($q[\'order\']) || ((strtoupper($q[\'order\']) != \'DESC\') && (strtoupper($q[\'order\']) != \'ASC\')) ) {
$q[\'order\'] = \'ASC\';
}
$t->query_vars = $q;
}
function reverse_pagination_wp() {
global $wp_query;
$wp_query->posts = array_reverse($wp_query->posts);
}
if( !is_admin() ) {
add_action(\'pre_get_posts\', \'reverse_pagination_pre_get_posts\');
add_action(\'wp\', \'reverse_pagination_wp\');
}
我钩住了
pre_get_posts
操作并将订单查询变量切换为ASC,而不是默认描述。
接下来,我需要颠倒返回的帖子的顺序,使它们按相反的时间顺序排列。我选择了wp
根据本答复中概述的原因采取行动https://wordpress.stackexchange.com/a/22768
所以到目前为止情况看起来不错。我只需要修改第一页。现在如果我的博客有50页,没有paged
参数设置博客索引页将显示我的第一篇文章,而不是最新的文章。我需要一些逻辑来检查paged
未设置为将其设置为相同的值$wp_query->max_num_pages
对于该查询。
我还需要禁用从URL中删除/page/1/的规范重定向,并调整get_pagenum_link()
函数,使其返回/page/1/forget_pagenum_link(1)
http://hitchhackerguide.com/2011/02/12/get_pagenum_link/
如果还有什么可以添加的,以使这个插件更好,请说出来!谢谢,我希望我们能通过共同努力实现这一目标。
SO网友:user27068
此函数将为您提供页码的url,而不剥离第1页的url:
function get_pagenum_link_full($pagenum = 1, $escape = true ) {
global $wp_rewrite;
$pagenum = (int) $pagenum;
$request = remove_query_arg( \'paged\' );
$home_root = parse_url(home_url());
$home_root = ( isset($home_root[\'path\']) ) ? $home_root[\'path\'] : \'\';
$home_root = preg_quote( $home_root, \'|\' );
$request = preg_replace(\'|^\'. $home_root . \'|i\', \'\', $request);
$request = preg_replace(\'|^/+|\', \'\', $request);
if ( !$wp_rewrite->using_permalinks() || is_admin() ) {
$base = trailingslashit( get_bloginfo( \'url\' ) );
$result = add_query_arg( \'paged\', $pagenum, $base . $request );
}
}
从原始代码修改为
get_pagenum_link()
如此处所定义
http://phpxref.ftwr.co.uk/wordpress/wp-includes/link-template.php.source.html#l1408get_pagenum_link_full(1);
会给你一些http://www.url.com/category/page/1
取决于您的永久链接设置。