首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >搜索元数据以查找具有在WordPress中具有多个值的元键的帖子

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

Stack Overflow用户
提问于 2021-05-25 22:25:01
回答 1查看 146关注 0票数 0

我遇到了一个关于CPT的元查询的问题。我将一个元键的多个值存储为用'|‘符号分隔的字符串。我想运行一个元查询,它用数字比较每个值,如果元有要搜索的值的>=,它应该返回结果。假设存储的元值为"5000 | 6000 | 10000“,搜索值为4500

现在它应该返回上面的post meta作为结果,因为它有5000,6000 & 10000。

下面是元查询示例:

代码语言:javascript
复制
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’从数值上比较它,因为它们都是寻找精确或相似的匹配,而不是条件逻辑。查询中需要进行哪些更改才能获得结果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-26 19:35:37

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

代码语言:javascript
复制
$new_size_field = get_post_meta( $post_id,'property_size', true );// $new_size_field = 5000 | 6000 | 10000 

之后,使用explode将这些值转换为单个值,并将其与名为'pyre_size2‘的新元键一起存储

代码语言:javascript
复制
$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元表中存储的数据将如下所示

代码语言:javascript
复制
property_size = 5000 | 6000 | 10000
pyre_size2 = 5000
pyre_size2 = 6000
pyre_size2 = 10000

现在,使用元查询进行搜索的代码如下:

代码语言:javascript
复制
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)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67689995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档