Woocommerce - 产品属性查询

时间:2017-04-19 12:32:43

标签: php wordpress woocommerce

有没有人知道按产品属性的范围查询类别存档页面产品的方法。以下是有效的,但这是因为这是产品的自定义字段,与产品属性相关联,存储为分类。

$meta_query[] = array(
    'key' => '_height',
    'value' => $_GET['min_height'],
    'compare' => '>='
  );
 $meta_query[] = array(
    'key' => '_height',
    'value' => $_GET['max_height'],
    'compare' => '<='
  );

是否可以实现上述目标,但具有产品属性,例如pa_capacity等。

我可以从一系列产品属性中为所有产品创建自定义字段,但我宁愿不这样做,因为它与属性和自定义字段中的内容重复。虽然这可以在经过测试后发挥作用。

2 个答案:

答案 0 :(得分:0)

看起来您正确的解决方案路径。 已经回答了一个熟悉的问题here

看起来WooCommerce使用分类法和术语而不是meta_keys。 因此,您的查询应该更像这样 -

$query_args = array(
 'post_type' => 'product',
 'tax_query' => array(
      array(
          'taxonomy' => 'product_type',
          'field'    => 'slug',
          'terms'    => 'custom_type', 
      ),
      array(
          'taxonomy' => 'pa_color',
          'field'    => 'slug',
          'terms'    => 'red', 
      ),
      array(
          'taxonomy' => 'pa_size',
          'field'    => 'slug',
          'terms'    => 'large', 
      ),
  ),
);

答案 1 :(得分:0)

您可以使用PHP / MySQL查询来实现所需的过滤

SELECT p.ID AS product_id,
       p.post_title AS product_name,
       t.term_id,
       tt.taxonomy AS attribute_name,
       t.`name` AS value_name,
       t.slug AS vlaue_slug
FROM wp_posts AS p,
     wp_terms AS t,
     wp_term_taxonomy AS tt,
     wp_term_relationships AS tr
WHERE tt.term_id = t.term_id
  AND p.ID = tr.`object_id`
  AND tr.term_taxonomy_id = tt.term_taxonomy_id
  AND tt.taxonomy IN ('pa_height', 'pa_capacity')
  AND ((tt.taxonomy = 'pa_height'
        AND t.`name` >= 10
        AND t.`name` <= 100)
       OR (tt.taxonomy = 'pa_capacity'
           AND t.`name` >= 23))
  AND p.post_type = 'product'
  AND p.post_status = 'publish'
ORDER BY p.post_title;

您可以使用PHP编辑('pa_height', 'pa_capacity'),也可以使用where子句编辑相关值。上面的查询将返回product_id(s),可以通过wc_get_product()传递并执行您的操作。

希望这有帮助!