我遇到了一个关于CPT的元查询的问题。我将一个元键的多个值存储为用'|‘符号分隔的字符串。我想运行一个元查询,它用数字比较每个值,如果元有要搜索的值的>=,它应该返回结果。假设存储的元值为"5000 | 6000 | 10000“,搜索值为4500
现在它应该返回上面的post meta作为结果,因为它有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’从数值上比较它,因为它们都是寻找精确或相似的匹配,而不是条件逻辑。查询中需要进行哪些更改才能获得结果?
发布于 2021-05-26 19:35:37
经过大量研究后,我发现无法查询存储的字符串并将其作为数值进行比较。以下是我的逻辑解决方案:存储的字符串大小为:"5000 | 6000 | 10000“首先我使用PHP explode函数将其分解:
$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);在代码中,您可以看到我添加了新的元键,以便搜索大小的属性。现在,搜索值将遍历该属性的所有大小,如果匹配,它将在结果中返回该属性(Post)。
https://stackoverflow.com/questions/67689995
复制相似问题