关于反向分页插件的帮助

时间:2012-08-02 作者:kingkool68

我看了这篇关于为什么在互联网上分页很奇怪的演讲。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/

如果还有什么可以添加的,以使这个插件更好,请说出来!谢谢,我希望我们能通过共同努力实现这一目标。

1 个回复
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#l1408

get_pagenum_link_full(1); 会给你一些http://www.url.com/category/page/1 取决于您的永久链接设置。

结束

相关推荐

Wp-content/plugins中的权限问题

我在本地机器上安装了一个WP,试图用插件弄脏我的手。我希望从github克隆一个包含此插件代码的项目。然而,我没有插件内部的权限,作为一个没有su权限的普通用户,我无法做到这一点。(当然,我可以成为根并这样做,但我不认为这是应该的)。然后,默认情况下,WP安装中的文件夹将组设置为“tape”,这对我来说很奇怪。本地WP安装上内部文件夹的正确权限应该是什么?