如何向meta_query添加过滤器,例如仅查找罗马数字

时间:2019-04-09 16:43:54

标签: wordpress roman-numerals meta-query

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

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


    $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); 

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我使用正则表达式解决了标题,说明和子标题的问题。仍在寻找最佳答案不是一个好主意。

$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;
                }
            }
        }