如何向 meta_query 添加过滤器,例如仅查找罗马数字
How to add filter to meta_query like finding only Roma Numeric
我在使用 meta_query 时遇到一些情境问题。 Customer Search IV,但结果包含 prIVate(原词为 private)。我只想显示包含 post 的 IV(罗马数字)。我 meta_query 从自定义插件中的标题、副标题和描述中搜索。我找到了 REGEXP,但找不到从标题、sub-title 和描述中找到漫游数字的正确方法。
客户只能找到罗马数字,他们也可以找到任何单词等
$args = array(
'numberposts' => -1,
'category' => 0,
'orderby' => 'post_date',
'order' => 'DESC',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'title',
'value' => $search_term,
'compare' => 'LIKE',
),
array(
'key' => 'sub-title',
'value' => $search_term,
'compare' => 'LIKE',
),
array(
'key' => 'description',
'value' => $search_term,
'compare' => 'LIKE',
)
),
'post_type' => 'gallery',
'post_status' => 'publish',
'suppress_filters' => true
);
$posts = get_posts($args, ARRAY_A);
正则表达式应该包括罗马数字如下(假设$search_term
只包括请求的罗马数字:
$regEx = '/(' . strtoupper($search_term) . ')/g';
我使用正则表达式解决了标题、描述和副标题的问题。还在寻找最佳答案不是个好主意。
$tempFlag = false;
foreach (explode(" ", $description) as $temp) {
if (preg_match('/^(?=[MDCLXVI])M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$/', $temp)) {
if (in_array($temp, $romeNumber)) {
$tempFlag = true;
}
}
}
我在使用 meta_query 时遇到一些情境问题。 Customer Search IV,但结果包含 prIVate(原词为 private)。我只想显示包含 post 的 IV(罗马数字)。我 meta_query 从自定义插件中的标题、副标题和描述中搜索。我找到了 REGEXP,但找不到从标题、sub-title 和描述中找到漫游数字的正确方法。
客户只能找到罗马数字,他们也可以找到任何单词等
$args = array( 'numberposts' => -1, 'category' => 0, 'orderby' => 'post_date', 'order' => 'DESC', 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'title', 'value' => $search_term, 'compare' => 'LIKE', ), array( 'key' => 'sub-title', 'value' => $search_term, 'compare' => 'LIKE', ), array( 'key' => 'description', 'value' => $search_term, 'compare' => 'LIKE', ) ), 'post_type' => 'gallery', 'post_status' => 'publish', 'suppress_filters' => true ); $posts = get_posts($args, ARRAY_A);
正则表达式应该包括罗马数字如下(假设$search_term
只包括请求的罗马数字:
$regEx = '/(' . strtoupper($search_term) . ')/g';
我使用正则表达式解决了标题、描述和副标题的问题。还在寻找最佳答案不是个好主意。
$tempFlag = false;
foreach (explode(" ", $description) as $temp) {
if (preg_match('/^(?=[MDCLXVI])M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$/', $temp)) {
if (in_array($temp, $romeNumber)) {
$tempFlag = true;
}
}
}