商店/类别 WooCommerce 页面上可变产品的属性值

问题描述 投票:0回答:1

在 WooCommerce 上的在线商店中,我使用在存档/类别页面上显示某些产品属性的代码。

add_action( 'woocommerce_before_shop_loop_item_title', 'new_template_loop_product_meta', 20 );
function new_template_loop_product_meta() {
    global $product;

    $attrs_by_cats = [
        20 => [ 'pa_size' ],
    ];

    $attr_list = [
        'Size' => 'pa_size',
    ];

    if ( ! is_object( $product ) ) {
        $product = wc_get_product( get_the_id() );
    }

    $cats = $product->get_category_ids();

    if ( ! is_array( $cats ) ) {
        return;
    }

    $attrs = [];

    foreach ( $cats as $cat ) {
        if ( isset( $attrs_by_cats[ $cat ] ) ) {
            $attrs[] = $attrs_by_cats[ $cat ];
        }
    }

    $allowed_attrs = array_unique( array_merge( [], ...$attrs ) );

    echo '<div class="custom-attributes">';

    foreach ( $attr_list as $attr_title => $attr_name ) {
        if ( in_array( $attr_name, $allowed_attrs, true ) ) {
            show_attribute( $product, $attr_title, $attr_name );
        }
    }

    echo '</div>';
}
/* Show attr */
function show_attribute( $product, $attr_title, $attr_name ) {
if ( 'sku' === $attr_name ) {
    $attr = (string) esc_html( $product->get_sku() );
} else {
    $attr = $product->get_attribute( $attr_name );

    if ( ! $attr ) {
        return;
    }
    $attr = explode( ', ', $attr ); // convert the coma separated string to an array

    $attr_arr = []; // Initialize

    // Loop through the term names
    foreach ( $attr as $term_name ) {
        // Embed each term in a span tag
        $attr_arr[] = sprintf('<span class="attr-term">%s</span>', $term_name);
    }
    // Convert back the array of formatted html term names to a string
    $attr = implode(' ', $attr_arr);
}

if ( '' === $attr ) {
    return;
}

printf( '<div class="custom-attributes-text">%s: %s</div>', $attr_title, $attr);
}

对于简单的产品,此代码可以正常工作。问题仅在于可变产品中的属性。

创建产品时,我添加了 S、M、L 尺寸并自动创建了变体。然后,对于每个尺寸 S、M 和 L,我手动将库存可用性设置为 30。

然后,L号已经卖完了,我的库存是0。除了在产品列表页面上显示所有尺寸外,而应显示 S 和 M。

如何修复此代码,使其适用于可变产品?

预先感谢您的帮助!

php wordpress woocommerce product
1个回答
0
投票
首先阅读

这个。您的 $product

 有一个 
is_type
 方法,您可以使用它来检查它是否可变。如果是这样,您可以
get_available_variations
,循环结果并相应地应用您的逻辑。

if ( $product->is_type( 'variable' ) ) { $variations = $product->get_available_variations(); foreach ( $variations as $variation ) { //Infer the size and the stock number from $variation and implement your logic } }
如果更适合您的需求,您也可以使用

get_children

。因此,您需要重新访问您的 
show_attribute
 方法,对其进行编辑,并使用 avoce 描述的资源应用反映您关于产品尺寸和库存可用性的逻辑的更改。

© www.soinside.com 2019 - 2024. All rights reserved.