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

时间:2014-10-14 15:17:13

标签: php wordpress-theming wordpress

我正在手动获取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的数据序列化,以便我只有一个唯一键_locations,其中包含与其关联的所有位置值。

现在我在提取产品时出现问题

$args = array(
      'post_type' => 'product',
      'product_cat' => $food_category->slug,
      'meta_key' => '_locations', 
      'meta_value' => 'newyork'   
     );
     $loop = new WP_Query($args);

我想只为newyork获取产品,但在数据库中它存储为序列化数组

s:69:"a:2:{i:0;s:7:"newyork";i:1;s:13:"massachusetts";}";

如何才能使此查询仅获取newyork产品。

由于

3 个答案:

答案 0 :(得分:2)

尝试:

$args = array(
  'post_type' => 'product',
  'product_cat' => $food_category->slug,
  'meta_query' => array(
     array(
        'key'     => '_location',
        'value'   => '%newyork%',
        'compare' => 'LIKE',
     ),
   ),
 );

答案 1 :(得分:0)

我有类似的问题,我使用serialize()解决了它。以下是示例。

$args = array(
  'post_type' => 'product',
  'product_cat' => $food_category->slug,
  'meta_query' => array(
     array(
        'key'     => '_location',
        'value'   => serialize( array( 'newyork' ) ),
        'compare' => 'LIKE',
     ),
   ),
 );

答案 2 :(得分:-1)

directionsService.route(request, function (response, status) {

    if (status == google.maps.DirectionsStatus.OK) {

        var routes = response.routes;

        for (var i = 0; i < routes.length; i++) {

            // Display the routes summary in a div
            document.getElementById('routes').innerHTML += 'Via ' + routes[i].summary + '<br />';
        }
    }
});

使用引号来避免像“newyorkcity”,“newyorkcounty”......

如果您存储城市名称可能不是这种情况,但如果您存储城市的ID,则会遇到大问题。

示例:

$args = array(
  'post_type' => 'product',
  'product_cat' => $food_category->slug,
  'meta_query' => array(
     array(
        'key'     => '_location',
        'value'   => '%"newyork"%', // note the quotes
        'compare' => 'LIKE',
     ),
   ),
 );

如果您搜索:

  • 5,你会得到例子1&amp; 2,当你不应该得到任何结果时;
  • “5”,您将得不到任何结果,如预期的那样