在 WordPress 中搜索具有多个值的元键的帖子的元数据

时间:2021-05-25 14:25:01

标签: wordpress meta-query

我的 CPT 元查询遇到问题。 我将单个元键的多个值存储为以“|”分隔的字符串符号。我想运行一个元查询,以数字方式比较每个值,如果元具有 >= 到搜索值,它应该返回结果。 假设存储的元值是“5000 | 6000 | 10000” 搜索的值是 4500

现在它应该返回上面的帖子元数据,因为它有 5000、6000 和 10000。

这里是元查询示例:

if(isset($_GET['sqft'])) {
if($_GET['sqft'] >= 1) {
    $args['meta_query'][] = array(
        'key' => 'pyre_property_size',
        'value' => $_GET['sqft'],
        'compare' => '>=',
        'type' => 'numeric'
    );
 }
}
query_posts($args);

我想不使用“Like”或“REGEX”在数字上比较它,因为它们都在寻找精确或相似的匹配,而不是条件逻辑。 该查询需要进行哪些更改才能获得结果?

1 个答案:

答案 0 :(得分:0)

经过大量研究,我发现无法查询存储的字符串并将其作为数值进行比较。 这是我的逻辑解决方案: 作为字符串存储的大小是:“5000 | 6000 | 10000” 首先我使用 PHP 爆炸函数爆炸它:

$new_size_field = get_post_meta( $post_id,'property_size', true );// $new_size_field = 5000 | 6000 | 10000 

之后使用explode将这些值转换为单个值并使用名为'pyre_size2'的新元键存储它

$single_size = (explode("|",$new_size_field));//converting into single value array
foreach( $single_size as $size ) {
        add_post_meta( $post_id, 'pyre_size2', $size, false );
}

现在,多个值存储在具有相同帖子 ID 的同一个元键上。 您可以看到 add_post_meta 函数的最后一个参数设置为 false,这将启用具有相同 post_id 和元键的元数据的冗余添加。有关更多详细信息,您可以查看此link

此后,DB post元表中存储的数据将是这样

property_size = 5000 | 6000 | 10000
pyre_size2 = 5000
pyre_size2 = 6000
pyre_size2 = 10000

现在用于搜索的元查询代码如下:

if(isset($_GET['sqft'])) {
if($_GET['sqft'] >= 1) {
$args['meta_query'][] = array(
    'key' => 'pyre_size2',//the new meta key
    'value' => $_GET['sqft'],
    'compare' => '>=',
    'type' => 'numeric'
);
 }
}

query_posts($args);

在代码中,你可以看到我添加了新的元键,以便搜索大小的属性。现在搜索值将遍历该属性的所有大小,如果大小写匹配,它将在结果中返回该属性(发布)。

相关问题