在元数据中搜索 post 的元数据,该元数据在 WordPress 中具有多个值
Search Meta data for a post that has a meta key that has multiple values in WordPress
我的 CPT 元查询遇到问题。
我有一个元键的多个值存储为用“|”分隔的字符串符号。我想要 运行 一个元查询,它在数字上比较每个值,如果元具有 >= 搜索值,它应该 return 结果。
假设存储的元值是“5000 | 6000 | 10000”
搜索的值是 4500
现在它应该 return 上面的 post 元作为结果,因为它有 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',因为它们都在寻找精确或相似的匹配,而不是条件逻辑。
该查询需要进行哪些更改才能获得结果?
经过大量研究,我发现没有办法查询存储的字符串并将其作为数值进行比较。
这是我的逻辑解决方案:
作为字符串存储的大小是:“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 );
}
现在为具有相同 post ID 的相同元键存储多个值。
您可以看到 add_post_meta 函数的最后一个参数设置为 false,这将允许使用相同的 post_id 和元键冗余添加元数据。更多详情,你可以看这个link.
之后,数据库中存储的数据将是这样的 post meta table
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);
在代码中,您可以看到我添加了新的元键以搜索大小的 属性。现在搜索值将遍历 属性 的所有大小,如果大小写匹配,结果将 return 即 属性(post)。
我的 CPT 元查询遇到问题。 我有一个元键的多个值存储为用“|”分隔的字符串符号。我想要 运行 一个元查询,它在数字上比较每个值,如果元具有 >= 搜索值,它应该 return 结果。 假设存储的元值是“5000 | 6000 | 10000” 搜索的值是 4500
现在它应该 return 上面的 post 元作为结果,因为它有 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',因为它们都在寻找精确或相似的匹配,而不是条件逻辑。 该查询需要进行哪些更改才能获得结果?
经过大量研究,我发现没有办法查询存储的字符串并将其作为数值进行比较。 这是我的逻辑解决方案: 作为字符串存储的大小是:“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 );
}
现在为具有相同 post ID 的相同元键存储多个值。 您可以看到 add_post_meta 函数的最后一个参数设置为 false,这将允许使用相同的 post_id 和元键冗余添加元数据。更多详情,你可以看这个link.
之后,数据库中存储的数据将是这样的 post meta table
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);
在代码中,您可以看到我添加了新的元键以搜索大小的 属性。现在搜索值将遍历 属性 的所有大小,如果大小写匹配,结果将 return 即 属性(post)。