在 wordpress 的管理面板上更改自定义 post 类型的搜索查询
Change search query of a custom post type on the admin panel in wordpress
我想在 wordpress 管理面板中更改搜索自定义 post 类型的查询。我用这个方法:
function change_admin_search( $query ) {
$post_type = 'custom_post_type';
if( ! is_admin() )
return;
if ( $query->query['post_type'] != $post_type )
return;
$search_term = $query->query_vars['s'];
$persian = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
$num = range(0, 9);
$persianNumbersOnly = str_replace( $num,$persian, $search_term);
$englishNumbersOnly = str_replace( $persian, $num, $search_term);
$query->query_vars['s'] = $englishNumbersOnly;
}
add_action( 'pre_get_posts', 'change_admin_search' );
在这个查询中,它只搜索$englishNumbersOnly
。我想用 $englishNumbersOnly
或 $persianNumbersOnly
进行搜索,而 $query->query_vars['s']
有一个 OR
查询。实际上有这样的查询:
post Like "%$englishNumbersOnly%" OR post Like "%$persianNumbersOnly%"
谢谢
"I want to show all result ( persian and english )"
wp_query(即 's')的搜索词参数接受多个 keyword/term。您可以为其提供多个关键字的方法是在关键字中间使用 +
符号,它应该是一个字符串而不是数组。像这样:
$query->set( 's' => 'keywordOne+keywordTwo+keywordThree' )
我们可以使用它来修改您的查询:
add_action('pre_get_posts', 'change_admin_search');
function change_admin_search($query)
{
$post_type = 'custom_post_type';
if (is_admin() && in_array($query->get('post_type'), array($post_type))) {
$search_term = sanitize_text_field($query->query_vars['s']);
$persian = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
$num = range(0, 9);
$persianNumbersOnly = str_replace($num, $persian, $search_term);
$englishNumbersOnly = str_replace($persian, $num, $search_term);
$query->set('s', strval($englishNumbersOnly) . '+' . strval($persianNumbersOnly));
}
}
注:
- 我已经合并并修改了您的
if
陈述。
- 我已经更改了您的“post 类型”条件检查,这样您就可以使用多个 post 类型。
- 我在搜索的关键字上使用了
sanitize_text_field
功能。
- 我使用
set
方法设置 s
值。
- 没有必要使用
strval
函数,但我已经使用它来确保您不会收到任何错误/警告。
这还没有经过测试,但理论上应该可以。让我知道你是否能让它工作。
我在 WP_Query::parse_search 方法中找到了解决方案。正如@Ruvee 所说,我们可以使用 '+'
符号为 's'
参数提供多个搜索词,但是在 parse_search 方法中, $searchand
值为 ' AND '
和 search_terms。我为 custom_post_type
自定义 parse_search 以使用 OR
而不是 AND
我想在 wordpress 管理面板中更改搜索自定义 post 类型的查询。我用这个方法:
function change_admin_search( $query ) {
$post_type = 'custom_post_type';
if( ! is_admin() )
return;
if ( $query->query['post_type'] != $post_type )
return;
$search_term = $query->query_vars['s'];
$persian = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
$num = range(0, 9);
$persianNumbersOnly = str_replace( $num,$persian, $search_term);
$englishNumbersOnly = str_replace( $persian, $num, $search_term);
$query->query_vars['s'] = $englishNumbersOnly;
}
add_action( 'pre_get_posts', 'change_admin_search' );
在这个查询中,它只搜索$englishNumbersOnly
。我想用 $englishNumbersOnly
或 $persianNumbersOnly
进行搜索,而 $query->query_vars['s']
有一个 OR
查询。实际上有这样的查询:
post Like "%$englishNumbersOnly%" OR post Like "%$persianNumbersOnly%"
谢谢
"I want to show all result ( persian and english )"
wp_query(即 's')的搜索词参数接受多个 keyword/term。您可以为其提供多个关键字的方法是在关键字中间使用 +
符号,它应该是一个字符串而不是数组。像这样:
$query->set( 's' => 'keywordOne+keywordTwo+keywordThree' )
我们可以使用它来修改您的查询:
add_action('pre_get_posts', 'change_admin_search');
function change_admin_search($query)
{
$post_type = 'custom_post_type';
if (is_admin() && in_array($query->get('post_type'), array($post_type))) {
$search_term = sanitize_text_field($query->query_vars['s']);
$persian = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
$num = range(0, 9);
$persianNumbersOnly = str_replace($num, $persian, $search_term);
$englishNumbersOnly = str_replace($persian, $num, $search_term);
$query->set('s', strval($englishNumbersOnly) . '+' . strval($persianNumbersOnly));
}
}
注:
- 我已经合并并修改了您的
if
陈述。 - 我已经更改了您的“post 类型”条件检查,这样您就可以使用多个 post 类型。
- 我在搜索的关键字上使用了
sanitize_text_field
功能。 - 我使用
set
方法设置s
值。 - 没有必要使用
strval
函数,但我已经使用它来确保您不会收到任何错误/警告。
这还没有经过测试,但理论上应该可以。让我知道你是否能让它工作。
我在 WP_Query::parse_search 方法中找到了解决方案。正如@Ruvee 所说,我们可以使用 '+'
符号为 's'
参数提供多个搜索词,但是在 parse_search 方法中, $searchand
值为 ' AND '
和 search_terms。我为 custom_post_type
自定义 parse_search 以使用 OR
而不是 AND