我在想有没有人能帮我?
基本上,我认为我需要使用add_rewrite_rule()在我的search结果中实现分页,因为我已经超出了默认查询的范围,因为在获取结果(在本例中是查询帖子和用户)时,需要进行大量额外的操作。
我搜索结果的第一页很好。例子:/?s=lighting&post_type=service.
然而,当我进入第二页的结果,我得到404。例子:/?s=lighting&post_type=service&paged=2.
任何帮助都将不胜感激!
<#>更新
下面是我的查询和任何相关代码的精简版本:
// Working with the query string
global $query_string;
$user_query_args = explode('&', $query_string );
$user_query_array = array();
if ( strlen( $query_string ) > 0 ) {
foreach ( $user_query_args as $key => $string ) {
$user_query_split = explode( '=', $string );
$user_query_array[$user_query_split[0]] = urldecode( $user_query_split[1] );
}
}
// Setting up `$paged`
global $paged;
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
if ( $paged === 1 ) {
$offset = 0;
} else {
$offset = ( $paged - 1 ) * $per_page;
}
// Args for user query
$user_args = array(
'number' => $per_page,
'offset' => $offset,
'role' => 'Subscriber',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'profile_service_1',
'value' => $posts_str, // string of post IDs
'compare' => 'IN'
),
array(
'key' => 'profile_service_2',
'value' => $posts_str, // string of post IDs
'compare' => 'IN'
),
)
);
// Creating the user query
$users_query = new WP_User_Query( array_merge( $user_query_array, $user_args ) );
$users = $users_query->get_results();
if ( sizeof( $users ) > 0 ) {
foreach ( $users as $user ) {
// Here's where I show the user stuff
}
}
// Setting up pagination
$total_users = $users_query->total_users;
$total_pages = ceil( $total_users / $per_page );
$pagination_args = array(
'base' => @add_query_arg('paged','%#%'),
'format' => '?paged=%#%',
'current' => $paged,
'total' => $total_pages,
'prev_text' => 'Previous',
'next_text' => 'Next',
'type' => 'list',
);
if ( $wp_rewrite->using_permalinks() ) {
$pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg( 's', get_pagenum_link( 1 ) ) ).'page/%#%/', 'paged' );
}
if ( ! empty( $wp_query->query_vars['s'] ) ) {
$pagination['add_args'] = array( 's' => get_query_var( 's' ) );
}
echo paginate_links( $pagination_args );发布于 2023-05-04 10:43:04
问题的根源在于您使用的是s,这是post查询搜索参数,但是代码是用于用户查询的。
这意味着,如果您的用户查询有5页,但只有2页的帖子,第3页将404。
相反,在$_GET中使用一个专用参数,这个参数已经不是保留的查询变量了。这确实意味着不会使用search.php模板,但可以通过多种方式修复,例如页面模板、重写规则、模板筛选器等。
的一个侧面
meta_query的性能很差。如果要搜索的值不是模糊的,请考虑使用用户分类来存储它们。这将提供一个戏剧性的性能提升。将Post/User/Term元优化为您已经知道post ID的get_post_meta类型调用,这些表的结构不是按照元性能进行搜索/筛选/分组帖子的。
请记住这一点,因为这里有一个折衷,元在get_post_meta类型的情况下是快速的,在meta_query类型的情况下,随着表的大小增加,会变得非常慢。分类检索的速度并不快,但它们比meta_query类型查询快几个数量级。这就是为什么类别和标签不是存储在post中,而是像特色图像ID这样的东西。
https://wordpress.stackexchange.com/questions/415602
复制相似问题