在 wordpress 的管理面板上更改自定义帖子类型的搜索查询

Posted

技术标签:

【中文标题】在 wordpress 的管理面板上更改自定义帖子类型的搜索查询【英文标题】:Change search query of a custom post type on the admin panel in wordpress 【发布时间】:2022-01-10 05:15:27 【问题描述】:

我想更改在 wordpress 管理面板中搜索自定义帖子类型的查询。我用这个方法:

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%"

谢谢

【问题讨论】:

为什么$englishNumbersOnly$persianNumbersOnly这两个变量是一样的?你想用str_replace 做什么?你能解释一下最终的结果是什么吗?当您运行 sn-p 时,是否收到任何错误/警告? @Ruvee 对不起,这是我的错误。这两个变量不相等。我更新了这个问题。谢谢 @Ruvee 在帖子列表中,有些帖子的标题有英文数字,​​有些帖子有波斯数字。当用户按英文数字搜索时,只有第一组出现在结果中,当用户按波斯数字搜索时,只有第二组出现在结果中。我想显示所有结果(波斯语和英语) 【参考方案1】:

“我想显示所有结果(波斯语和英语)”

wp_query 的搜索词参数(即“s”)接受多个关键字/词。您可以提供多个关键字的方法是在关键字中间使用+ 符号,它应该是一个字符串而不是数组。像这样:

$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 语句。 我已更改您的“帖子类型”条件检查,以便您可以使用多种帖子类型。 我在搜索的关键字上使用了sanitize_text_field 函数。 我使用set 方法设置s 值。 使用strval 函数不是必需的,但我使用它来确保您不会收到任何错误/警告。

这尚未经过测试,但理论上它应该可以工作。让我知道你是否可以让它工作。

【讨论】:

感谢您的回复,但它不起作用。 '+' 号不起作用,它不返回任何结果 “+”号不起作用,因为它会搜索 Existence of both keywords/terms。我解决问题。感谢您的帮助【参考方案2】:

我在WP_Query::parse_search 方法中找到了解决方案。正如@Ruvee 所说,我们可以使用'+' 符号为's' 参数提供多个搜索词,但是在parse_search 方法中,$searchand 的值是' AND ' 并且它和ssearch_terms。我为 custom_post_type 自定义 parse_search 以使用 OR 而不是 AND

【讨论】:

以上是关于在 wordpress 的管理面板上更改自定义帖子类型的搜索查询的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义帖子类型时更改侧边栏的一侧(左/右)

Wordpress 在自定义帖子类型存档页面上按日期排序

如何在 Wordpress 管理面板中创建自定义 HTML 表单?

在 WordPress 管理列帖子/产品自定义帖子类型中显示 Slug

在 Wordpress 中,如何将自定义帖子类型的默认管理员排序顺序设置为自定义列?

在 WordPress 中以编程方式将文件上传给用户