带Get值的WordPress分页

时间:2016-12-10 作者:Ranuka

我允许读者使用不同的参数选择帖子顺序。例如,用户可以通过“投票”来订购帖子。(投票是一种自定义的帖子类型。)

那么URL将是http://example.com/?sort_by_type=vote

我用过pre_get_posts 对帖子进行排序的操作。它工作得很好。问题是分页。

分页在我的主题中是这样的。

http://example.com/?sort_by_type=vote/page/2/
但它应该是http://example.com/page/2/?sort_by_type=vote 正确工作。

那么我如何更正分页呢?

@govind评论后编辑:我使用的主题不是我自己开发的主题。如果URL包含?sort_by_type=vote 请求我使用更改后订单pre_get_posts 滤器

当我查看主题时,我发现了以下代码。

<?php if ( is_home() || is_archive() || is_search() ) : // If viewing the blog, an archive, or search results. ?>

    <?php loop_pagination(
        array( 
            \'prev_text\' => _x( \'&larr; Previous\', \'posts navigation\', \'daily\' ), 
            \'next_text\' => _x( \'Next &rarr;\',     \'posts navigation\', \'daily\' )
        ) 
    ); ?>

<?php endif; ?>

2 个回复
最合适的回答,由SO网友:GKS 整理而成

您可以使用创建自定义分页paginate_link() 函数并在当前url后添加自定义查询字符串。

要向分页链接添加参数,可以在“add\\u args”中将其作为数组参数传递

if ( is_home() || is_archive() || is_search() ) : 

    echo paginate_links(array(
         \'base\' => preg_replace(\'/\\?.*/\', \'/\', get_pagenum_link(1)) . \'%_%\',
         \'current\' => max(1, get_query_var(\'paged\')),
         \'format\' => \'page/%#%\',
         \'total\' => $wp_query->max_num_pages,
         // here you can pass custom query string to the pagination url
         \'add_args\' => array(
             \'sort_by_type\' => ( !empty($_GET[\'sort_by_type\']) ) ? $_GET[\'sort_by_type\'] : \'vote\'
         )
     ));    

endif; 
用上述代码替换分页代码。

它将使用自定义查询字符串打印所有字符串。http://example.com/page/2/?sort_by_type=vote

希望这有帮助!

SO网友:Mostafa Soufi

您应该为do it定义一个新的分页函数。

<?php
function custom_pagination() {

    if( is_singular() )
        return;

    global $wp_query;

    /** Stop execution if there\'s only 1 page */
    if( $wp_query->max_num_pages <= 1 )
        return;

    $paged = get_query_var( \'paged\' ) ? absint( get_query_var( \'paged\' ) ) : 1;
    $max   = intval( $wp_query->max_num_pages );

    /** Add current page to the array */
    if ( $paged >= 1 )
        $links[] = $paged;

    /** Add the pages around the current page to the array */
    if ( $paged >= 3 ) {
        $links[] = $paged - 1;
        $links[] = $paged - 2;
    }

    if ( ( $paged + 2 ) <= $max ) {
        $links[] = $paged + 2;
        $links[] = $paged + 1;
    }

    echo \'<div class="navigation"><ul>\' . "\\n";

    /** Previous Post Link */
    if ( get_previous_posts_link() )
        printf( \'<li>%s</li>\' . "\\n", get_previous_posts_link() );

    /** Link to first page, plus ellipses if necessary */
    if ( ! in_array( 1, $links ) ) {
        $class = 1 == $paged ? \' class="active"\' : \'\';

        printf( \'<li%s><a href="%s">%s?sort_by_type=vote</a></li>\' . "\\n", $class, esc_url( get_pagenum_link( 1 ) ), \'1\' );

        if ( ! in_array( 2, $links ) )
            echo \'<li>…</li>\';
    }

    /** Link to current page, plus 2 pages in either direction if necessary */
    sort( $links );
    foreach ( (array) $links as $link ) {
        $class = $paged == $link ? \' class="active"\' : \'\';
        printf( \'<li%s><a href="%s">%s?sort_by_type=vote</a></li>\' . "\\n", $class, esc_url( get_pagenum_link( $link ) ), $link );
    }

    /** Link to last page, plus ellipses if necessary */
    if ( ! in_array( $max, $links ) ) {
        if ( ! in_array( $max - 1, $links ) )
            echo \'<li>…</li>\' . "\\n";

        $class = $paged == $max ? \' class="active"\' : \'\';
        printf( \'<li%s><a href="%s">%s?sort_by_type=vote</a></li>\' . "\\n", $class, esc_url( get_pagenum_link( $max ) ), $max );
    }

    /** Next Post Link */
    if ( get_next_posts_link() )
        printf( \'<li>%s</li>\' . "\\n", get_next_posts_link() );

    echo \'</ul></div>\' . "\\n";

}

相关推荐

change pagination url

目前,我的分页页面URL为:http://www.example.com/category_name/page/2但我需要将此URL结构更改为:http://www.example.com/category_name/?page=2等有什么解决方案吗?