我允许读者使用不同的参数选择帖子顺序。例如,用户可以通过“投票”来订购帖子。(投票是一种自定义的帖子类型。)
那么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( \'← Previous\', \'posts navigation\', \'daily\' ),
\'next_text\' => _x( \'Next →\', \'posts navigation\', \'daily\' )
)
); ?>
<?php endif; ?>
最合适的回答,由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";
}