如何向 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的主要内容,如果未能解决你的问题,请参考以下文章
WP_Query 与 meta_query 和自定义字段的值为 0