个性化阅读
专注于IT技术分析

将meta_value保存为序列化数组时的WP_Query

我正在手动获取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:"newyork";i:1;s:13:"massachusetts";}";

我如何才能使此查询仅获取纽约产品。

谢谢


#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” …

如果存储城市名称可能不是这种情况, 但是如果存储例如城市的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″, 你将不会获得任何结果
赞(0)
未经允许不得转载:srcmini » 将meta_value保存为序列化数组时的WP_Query

评论 抢沙发

评论前必须登录!