【问题标题】:Woocommerce - product attribute queryWoocommerce - 产品属性查询
【发布时间】:2017-04-19 12:32:43
【问题描述】:

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

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

是否可以通过产品属性(例如 pa_capacity 等)实现上述目标。

我可以从选择的产品属性中为所有产品创建自定义字段以解决问题,但我宁愿不这样做,因为它与属性和自定义字段中的内容重复。虽然这已经过测试了。

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    看起来您的解决方案正确无误。 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', 
          ),
      ),
    );
    

    【讨论】:

    • 不确定这是否适用于上述基于范围的查询?由于上面的查询使用了两个值,我认为产品属性是不可能的,因为它们是分类法。以上适用于在两个值之间获取产品,例如 100 - 200。我试图澄清产品属性是否可能,因为与我使用自定义字段的问题相比,它们是分类法。
    【解决方案2】:

    您可以使用 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() 传递并做你的事情。

    希望这会有所帮助!

    【讨论】:

    • 是否可以编辑当前查询,因为我的问题中的代码正在运行以编辑产品存档页面上的当前查询,只需添加新的元查询条件?而不必重建整个产品查询本身。
    猜你喜欢
    • 2018-01-31
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 2020-05-16
    • 2020-06-03
    相关资源
    最近更新 更多