PAGINATE_LINKS链接与我查询页面的方式不一致

时间:2014-04-27 作者:Andrea Moro

好的,我有一个自定义的帖子类型页面,我已经将paginate_links 用于在元素中导航的函数。

如果我不做任何事情,让WP使用任何附加到归档页面的机制,那么paginate_links 工作正常,但之前的链接永远不会返回到第一页。

手动更改链接效果良好。

相反,如果我像答案所建议的那样做here, 覆盖wp_query 对象paginate_links 移到第二页,但“当前”始终保持在第1页。

CODE

$current = get_query_var(\'page\') ? get_query_var(\'page\') : 1; // Get query var
$record_per_page = 2; // How many faqs to display on each page
$offset = ( $current - 1 ) * $record_per_page;

    $args = array(
        \'post_type\'         => \'faqs\',
        \'orderby\'           => \'date\',
        \'order\'             => \'desc\',
        \'page\'              => $current,
        \'offset\'            => $offset,
        \'posts_per_page\'    => $record_per_page,
    ); 

    $the_query = new WP_Query( $args );
    $temp_query = $wp_query;
    $wp_query = NULL;
    $wp_query = $the_query;

    $row                = 1;
    $total              = ceil(wp_count_posts(\'faqs\')->publish / $record_per_page);

    while ( have_posts() ) : the_post();
        echo get_the_ID();  
    endwhile;

    // Reset postdata
    wp_reset_postdata();

    if ( $total > 1) {

        $paginate_links = paginate_links( array(
            //\'base\'      => @add_query_arg( \'page\', \'%#%\' ),
            \'base\'      => \'%_%\',
            \'prev_text\' => __(\'« Indietro\'),
            \'next_text\' => __(\'Avanti »\'),
            \'mid_size\'  => 5,
            \'format\'    => \'?page=%#%\',
            \'current\'   => $current,
            \'total\'     => $total
        )); echo $paginate_links;
    }

// Reset main query object
$wp_query = NULL;
$wp_query = $temp_query;
知道发生了什么吗?

2 个回复
SO网友:Andrea Moro

好的,这个问题似乎与base和format参数有关。我可能无法从技术上正确解释发生了什么。然而,从我在存档页面中看到的情况来看,我的页面参数默认为“page”,而不是预期的“paged”。

也就是说,当使用设置为“%\\%”的基参数时,哈希应该采用正确的上一页或下一页编号。这使得无法使用格式并在需要时调整输出。

相反,使用“%\\%”强制WP使用format参数将“%\\%”设置为值的一部分,可使WP始终在任何地方使用当前页面。

因此,我找到的解决方案是调整基本参数中的所有内容,如以下代码段所示:

$paginate_links = paginate_links( array(
                \'base\' => preg_replace(\'/\\?.*/\', \'/\', get_pagenum_link()) . \'%_%\',
                \'prev_text\' => __(\'« Indietro\'),
                \'next_text\' => __(\'Avanti »\'),
                \'mid_size\'  => 5,
                \'current\'   => $current,
                \'total\'     => $totalpages
            ));

SO网友:s_ha_dum

paginate_links() 有一个我认为很可怕的bug,因为它在许多默认情况下不能正常工作base 参数,甚至更复杂的示例base 在法典中--\'base\' => str_replace( $big, \'%#%\', esc_url( get_pagenum_link( $big ) ) ),. 第一个链接不会附加分页参数,该链接默认为“this page”,这意味着您无法返回到第一个页面。

我发现解决这个问题的方法是在base-- 类似于\'base\' => get_permalink().\'%_%\',

结束

相关推荐