如何向 meta_query 添加过滤器,例如仅查找 Roma Numeric

Posted

技术标签:

【中文标题】如何向 meta_query 添加过滤器,例如仅查找 Roma Numeric【英文标题】:How to add filter to meta_query like finding only Roma Numeric 【发布时间】:2019-08-31 00:39:29 【问题描述】:

我对 meta_query 有一些情境问题。客户搜索 IV,但结果包含私有(原始词是私有的)。我只想显示包含 IV(罗马数字)的帖子。我的 meta_query 搜索来自自定义插件中的标题、子标题和描述。我找到了 REGEXP,但我找不到从标题、副标题和描述中找到漫游数字的正确方法。

客户只能找到罗马数字,他们也可以找到任何单词等。

$args = 数组( 'numberposts' => -1, '类别' => 0, 'orderby' => 'post_date', '订单' => 'DESC', 'meta_query' => 数组( '关系' => '或', 大批( '键' => '标题', '价值' => $search_term, '比较' => '喜欢', ), 大批( 'key' => '副标题', '价值' => $search_term, '比较' => '喜欢', ), 大批( '键' => '描述', '价值' => $search_term, '比较' => '喜欢', ) ), 'post_type' => '画廊', 'post_status' => '发布', 'suppress_filters' => 真 ); $posts = get_posts($args, ARRAY_A);

【问题讨论】:

【参考方案1】:

正则表达式应该包含如下罗马数字(假设$search_term只包含请求的罗马数字:

$regEx = '/(' . strtoupper($search_term) . ')/g';

【讨论】:

【参考方案2】:

我使用正则表达式解决了标题、描述和子标题的问题。继续寻找最佳答案可不是什么好主意。

$tempFlag = false;      
foreach (explode(" ", $description) as $temp) 
            if (preg_match('/^(?=[MDCLXVI])M*(C[MD]|D?C0,3)(X[CL]|L?X0,3)(I[XV]|V?I0,3)$/', $temp)) 

                if (in_array($temp, $romeNumber)) 
                    $tempFlag = true;
                
            
        

【讨论】:

以上是关于如何向 meta_query 添加过滤器,例如仅查找 Roma Numeric的主要内容,如果未能解决你的问题,请参考以下文章

如何继续向现有 Firestore 查询添加条件?

如何在 Vue 组件的数据上添加多个过滤器?

在 Spark Scala 中向数据集添加过滤条件

WP_Query 与 meta_query 和自定义字段的值为 0

EF Core 如何向 .ThenIncludes 添加过滤器

向 graphql-ruby 实现添加多个过滤器