在商店页面上显示所有产品和变体,同时保持分页

时间:2015-12-03 14:46:26

标签: php wordpress woocommerce variations

我需要展示每件商品,如果它是一个可变产品(例如多种颜色),商店页面上的每个变体。

首先,我已经编写了自己的查询,以检索产品是否包含所有变体:

$product = get_product();
global $variable_id;
global $color;
if ($product->product_type == "variable") {
    $variations = $product->get_available_variations();
    foreach ($variations as $variation) {
        $color = $variation["attributes"]["attribute_pa_colour"];
        $variable_id = $variation['variation_id'];
        wc_get_template_part('content', 'product');
    }
} else {
    $variable_id = null;
    $color = null;
    wc_get_template_part('content', 'product');
}

我为变体设置了全局参数,然后在另一个模板文件中成功获得了正确的图像。

此解决方案的问题在于分页被破坏(1个产品多次出现)。

因此,我需要实现的是操纵主要产品查询以选择所有产品,其中具有变体的人必须针对每个变体出现一次具有正确的图像链接和变化值(我需要主要产品的信息)链接到正确的页面)。 这可以通过基于Left Join的同一产品表上的post_parent来实现。

这里的关键是保持默认的woocommerce行为。这是检索产品的woocommerce功能:

private function query_products( $args ) {
    // Set base query arguments
    $query_args = array(
        'fields'      => 'ids',
        'post_type'   => 'product',
        'post_status' => 'publish',
        'meta_query'  => array(),
    );
    if ( ! empty( $args['type'] ) ) {
        $types = explode( ',', $args['type'] );
        $query_args['tax_query'] = array(
            array(
                'taxonomy' => 'product_type',
                'field'    => 'slug',
                'terms'    => $types,
            ),
        );
        unset( $args['type'] );
    }

    // Filter products by category
    if ( ! empty( $args['category'] ) ) {
        $query_args['product_cat'] = $args['category'];
    }

    // Filter by specific sku
    if ( ! empty( $args['sku'] ) ) {
        if ( ! is_array( $query_args['meta_query'] ) ) {
            $query_args['meta_query'] = array();
        }
        $query_args['meta_query'][] = array(
            'key'     => '_sku',
            'value'   => $args['sku'],
            'compare' => '='
        );
        $query_args['post_type'] = array( 'product', 'product_variation' );
    }
    $query_args = $this->merge_query_args( $query_args, $args );
    return new WP_Query( $query_args );
}

所以基本上,我需要找到一种方法来覆盖这个函数,以便返回一个包含所有' simple'的WP_Query对象。产品和产品适用于所有变量'的变化。产品,而所有通过$args传递的参数都会继续有效。

1 个答案:

答案 0 :(得分:1)

我找到了一个解决方案:“Woocommerce Show Single Variations”插件: https://iconicwp.com/products/woocommerce-show-single-variations/

备注:如果您已有类别,则必须删除并重新添加。此外,它仍然不适用于短代码,但作者正在研究它。

更新:更改了插件的链接