【问题标题】:Search Meta data for a post that has a meta key that has multiple values in WordPress在 WordPress 中搜索具有具有多个值的元键的帖子的元数据
【发布时间】:2021-08-13 19:36:22
【问题描述】:

我的 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”,因为它们都在寻找精确或相似的匹配,而不是条件逻辑。 该查询需要进行哪些更改才能获得结果?

【问题讨论】:

    标签: wordpress meta-query


    【解决方案1】:

    经过大量研究,我发现没有办法查询存储的字符串并将其作为数值进行比较。 这是我的逻辑解决方案: 存储为字符串的大小为:“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)。

    【讨论】:

    • 更新我在 save_post 钩子中处理的属性大小。每当更新帖子时,元键“pyre_size2”的先前元值已被删除,新的大小使用explode以相同的方式存储。
    猜你喜欢
    • 2011-12-09
    • 2021-09-23
    • 2017-06-12
    • 2016-08-18
    • 1970-01-01
    • 2014-04-08
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多