我正在手动获取woocommerce产品。
问题是我在产品上有一个自定义字段, 即_locations。一个产品可以属于多个位置, 因此我在wp-admin的产品添加表单中提供了一个多选列表。
以下是我保存meta_value的功能
function woo_add_custom_general_fields_save( $post_id ){
// Select
$woocommerce_select = $_POST['_locations'];
if( !empty( $woocommerce_select ) )
update_post_meta( $post_id, '_locations', esc_attr(maybe_serialize($woocommerce_select )) );
}
注意, 我已经对meta_value的数据进行了序列化, 因此我只有一个唯一的key _locations, 并且所有的location值都与之关联。
现在, 当我提取产品时出现问题
$args = array(
'post_type' =>
'product', 'product_cat' =>
$food_category->
slug, 'meta_key' =>
'_locations', 'meta_value' =>
'newyork'
);
$loop = new WP_Query($args);
我只想获取纽约商品, 但在数据库中将其存储为序列化数组
s:69:"a:2:{i:0;
s:7:&
quot;
newyork&
quot;
;
i:1;
s:13:&
quot;
massachusetts&
quot;
;
}";
我如何才能使此查询仅获取纽约产品。
谢谢
#1尝试:
$args = array(
'post_type' =>
'product', 'product_cat' =>
$food_category->
slug, 'meta_query' =>
array(
array(
'key'=>
'_location', 'value'=>
'%newyork%', 'compare' =>
'LIKE', ), ), );
#2我有一个类似的问题, 我使用serialize()解决了。以下是示例。
$args = array(
'post_type' =>
'product', 'product_cat' =>
$food_category->
slug, 'meta_query' =>
array(
array(
'key'=>
'_location', 'value'=>
serialize( array( 'newyork' ) ), 'compare' =>
'LIKE', ), ), );
#3
$args = array(
'post_type' =>
'product', 'product_cat' =>
$food_category->
slug, 'meta_query' =>
array(
array(
'key'=>
'_location', 'value'=>
'%"newyork"%', // note the quotes
'compare' =>
'LIKE', ), ), );
使用引号避免出现以下情况:” newyorkcity” , ” newyorkcounty” …
【将meta_value保存为序列化数组时的WP_Query】如果存储城市名称可能不是这种情况, 但是如果存储例如城市的ID, 则会遇到很大的问题。
例子:
1. a:6:{i:0;
s:3:"234";
i:1;
s:3:"539";
i:2;
s:3:"305";
i:3;
s:3:"541";
i:4;
s:3:"385";
i:5;
s:3:"588";
}
2. a:2:{i:0;
s:3:"182";
i:1;
s:3:"539";
}
3. a:1:{i:0;
s:3:"267";
}
如果你搜索:
- 5, 你将获得示例1和2, 而你根本不会获得任何结果;
- ” 5″ , 你将不会获得任何结果
推荐阅读
- href标签属性不可点击
- wp_enqueue_style未添加版本
- Ubuntu安装MPEG-4 AAC解码器和H.264解码器
- 我们的解决思路是使用图引擎来驱动业务逻辑的执行
- day12作业(toString()方法和equals()方法)
- VMware ESXI 7.0 手动安装INTEL万兆X550-T2网卡驱动教程
- IDEA提交作业(gitee)
- 自动化集成(Docker容器入门简介)
- day05作业(表示学生信息的类Student)