在自定义查询中将URL查询追加到下一帖子链接

时间:2017-12-05 作者:bravokiloecho

有没有办法修改get_next_posts_link 函数,以便向该链接的URL添加查询href?

例如,默认函数:

$customQuery = new WP_Query();
echo get_next_posts_link( \'Next\', $max_page );
将输出<a> 用URL标记http://example.org/page/2/.

以及我希望的自定义函数:

$customQuery = new WP_Query();
$queries = array(
   \'q1\' => \'cats\',
   \'q2\' => \'lasers\'
);

echo get_next_posts_link_custom( \'Next\', $max_page, $queries );
将输出<a> 用URL标记http://example.org/page/2/?q1=cats&q2=lasers.

任何关于如何构建此功能的指导都将不胜感激!

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

在内心深处,该函数使用get_pagenum_link(). 这是可过滤的get_pagenum_link 滤器因此,您可以添加和删除使用全局变量的过滤器,该全局变量在检索链接之前在函数中设置:

function wpse_287817_add_query_args( $url ) {
    global $wpse_287817_query_args;

    return add_query_arg( $wpse_287817_query_args, $url );
}
add_filter( \'get_pagenum_link\', \'wpse_287817_add_query_args\', 10 );

function wpse_287817_get_next_posts_link( $label = null, $max_page = 0, $query_args = array() ) {
    global $wpse_287817_query_args;

    $wpse_287817_query_args = $query_args;

    $link = get_next_posts_link( $label, $max_page );

    return $link;
}
然后你会这样使用它:

$query_args = array(
    \'q1\' => \'cats\',
    \'q2\' => \'lasers\',
);

echo wpse_287817_get_next_posts_link( \'Next\', $max_page, $query_args );
这相当混乱,因为需要使用全局变量来传递要添加到URL的值。因此,如果您实际上不需要将查询参数传递到函数中,并且可以从过滤器回调中获取它们,请这样做。

例如,如果你只是想$_GET[] URL上的变量,您根本不需要自定义函数或全局变量,只需在回调中设置即可:

function wpse_287817_add_query_args( $url ) {
    $query_args = array();

    if ( isset( $_GET[\'my_var\'] ) ) {
        $query_args[] = $_GET[\'my_var\'];
    }

    if ( isset( $_GET[\'my_other_var\'] ) ) {
        $query_args[] = $_GET[\'my_other_var\'];
    }

    return add_query_arg( $query_args, $url );
}
add_filter( \'get_pagenum_link\', \'wpse_287817_add_query_args\', 10 );

结束

相关推荐

Custom taxonomy pagination

我正在为自定义分类法存档页创建自定义编号分页。因此,我在显示分页、显示正确的链接等方面没有问题。但是,当我单击第2页上方的链接时(例如第3页,如:my-website.com/page/3/?my_category=some-term我得到404-页面不存在。该类别包含60多篇帖子,应该有8页,但只有第一页和第二页正确显示my-website.com/?my_category=some-term和my-website.com/page/2/?my_category=some-term但以上所有的都是404