Woocommerce中带有产品类别的产品变体WP_Query

呻吟

使用Woocommerce,我试图为产品类别为“ Apple”的产品变型帖子类型创建WP_Query。

$args = array(
    'product_cat'    => 'Apple',
    'post_type'      => array('product', 'product_variation'),
    'post_status'    => 'publish',
    'key'            => '_visibility',
    'value'          => 'visible',
    'posts_per_page' => 100,
    'taxonomy'       => 'pa_size',
    'meta_value'     => '39',
    'meta_query'     => array(
        array(
            'key'         => '_stock',
            'value'       => 0,
            'compare'     => '>'
        )
    )
);

但是我无法在此查询中使用它。如果删除'product_cat' => 'Apple',则查询有效。为什么?

LoicTheAztec

WP_Query关于Woocommerce产品,存在许多错误

  • 对于产品类别产品属性,通常最好使用atax_query代替。
  • 对于产品可见性,自Woocommerce 3起,它由product_visibility分类'exclude-from-search''exclude-from-catalog'术语处理

有关产品变化的重要说明:

  • 产品类别(或产品标记)没有处理由产品的变化,但由父变量产物
  • 变体的产品属性将作为后置元数据处理,其后带有meta_keyattribute_”和slugmet_value一词
  • 产品版本不处理产品可见性,因为它们不会显示在存档页面中。
  • 它们未显示在存档页面中(如前所述)。

因此,在使用时WP_Query,您不能同时查询“ product”帖子类型和“ product_variation”帖子类型,因为它们实际上是不同的

为了使您的查询适用于“ product_variation”帖子类型,您需要一个小的实用程序函数,该函数将获取产品类别的父变量product (或任何自定义分类法作为Product标签…)

// Utility function to get the parent variable product IDs for a any term of a taxonomy
function get_variation_parent_ids_from_term( $term, $taxonomy, $type ){
    global $wpdb;

    return $wpdb->get_col( "
        SELECT DISTINCT p.ID
        FROM {$wpdb->prefix}posts as p
        INNER JOIN {$wpdb->prefix}posts as p2 ON p2.post_parent = p.ID
        INNER JOIN {$wpdb->prefix}term_relationships as tr ON p.ID = tr.object_id
        INNER JOIN {$wpdb->prefix}term_taxonomy as tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
        INNER JOIN {$wpdb->prefix}terms as t ON tt.term_id = t.term_id
        WHERE p.post_type = 'product'
        AND p.post_status = 'publish'
        AND p2.post_status = 'publish'
        AND tt.taxonomy = '$taxonomy'
        AND t.$type = '$term'
    " );
}

代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试和工作。必要的WP_Query下方...


此处(仅)与特定产品类别和特定变体属性值相关的产品变体WP_Query代码

// Settings
$cat_name = 'Apple'; // Product category name
$attr_taxonomy = 'pa_size'; // Product attribute
$attribute_term_slugs = array('39'); // <== Need to be term SLUGs

$query = new WP_Query( array(
    'post_type'       => 'product_variation',
    'post_status'     => 'publish',
    'posts_per_page'  => 100,
    'post_parent__in' => get_variation_parent_ids_from_term( $cat_name, 'product_cat', 'name' ), // Variations
    'meta_query'      => array(
        'relation'    => 'AND',
        array(
            'key'     => '_stock',
            'value'   => 0,
            'compare' => '>'
        ),
        array( 
            'key'     => 'attribute_'.$attr_taxonomy, // Product variation attribute
            'value'   => $attribute_term_slugs, // Term slugs only
            'compare' => 'IN',
        ),
    ),
) );

// Display the queried products count
echo '<p>Product count: ' . $query->post_count . '<p>';

// Displaying raw output for posts
print_pr($query->posts);

经过测试和工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

获取WooCommerce中当前产品类别的兄弟姐妹术语ID的列表

删除Woocommerce中针对特定产品类别的添加购物车按钮

在WP_Query中获取WooCommerce订阅产品类型和特定类别

显示Woocommerce中特定产品类别的产品

隐藏Woocommerce中基于产品类别的送货方式

隐藏Woocommerce中具有特定产品类别的产品

从Woocommerce中的子产品类别ID获取父产品类别ID

在WP_Query中从当前产品类别术语ID获取所有Woocommerce产品

产品类别的WooCommerce产品价格中的自定义小数

取消设置woocommerce中特定产品类别的产品选项卡

WooCommerce中特定产品类别的小数步长

从WP_Query中排除WooCommerce产品类别

列出Woocommerce中给定产品类别的子类别

获取Woocommerce中特定产品类别的特定产品属性值

从显示类别为Woocommerce的子类别的产品类别中删除边栏

避免在Woocommerce中更新特定产品类别的购物车价格

用Woocommerce 3中特定产品类别的产品替换加售商品

在Woocommerce中仅允许购买特定产品类别的一种产品

在Woocommerce中删除产品类别的占位符图像

在Woocommerce中检查产品类别的产品

从WooCommerce中的“相关产品”中排除产品类别

获取WooCommerce中的所有产品类别

在Woocommerce档案中获取当前产品类别的子类别

如何从当前的WooCommerce产品类别中获取所有产品?

(1.9)获取所有产品类别的ID(在产品页面上)

更改 Woocommerce 中特定产品类别的购物车项目价格

获取 WooCommerce 中顶级产品类别的自定义数组

在 WooCommerce 中显示不包括产品类别的订单项目名称

每个产品类别的总价格值 - Woocommerce