我想在我的store 页面上显示可用的产品变体的属性(有库存的).我的代码完成了这项工作,但我得到的不是属性名称,而是属性的缩写名称,这看起来确实很糟糕.我应该做什么或改变什么?

代码如下所示:

add_action( 'woocommerce_after_shop_loop_item', 'display_loop_item_stock_notice', 90 );
function display_loop_item_stock_notice() {
    global $product, $wpdb;

    $is_in_stock = $product->is_in_stock();
    $backordered = $product->is_on_backorder();
    
    //Dla wariacji:
    if($product->is_type('variable'))
       {
          $stock_qty = $wpdb->get_var("
          SELECT SUM(pm.meta_value) FROM {$wpdb->prefix}posts as p
          JOIN {$wpdb->prefix}postmeta as pm ON p.ID = pm.post_id
          WHERE p.post_type = 'product_variation'
          AND p.post_status = 'publish' AND p.post_parent = '".get_the_id()."'
          AND pm.meta_key = '_stock' AND pm.meta_value IS NOT NULL");
        
        //Dla wariacji w magazynie: 
        if($stock_qty > 0)
        {
            echo '<span style="color:green; font-weight:bold;">  Opcje dostępne z magazynu:</span></br>';
            foreach ( $product->get_available_variations() as $key ) {
            $variation = wc_get_product( $key['variation_id'] );
            $stock = $variation->get_availability();
            $stock_quantity = $variation->get_stock_quantity();
            if($variation->is_in_stock( ) && $stock_quantity > 0)
            {
            $attr_string = array();
                foreach ( $key['attributes'] as $attr_name => $attr_value ) {
                $attr_string[] = $attr_value;
                    echo $variation->attribute_value;
            }
            echo '<span style="color:green;">'. implode( ', ', $attr_string ). ': ' . $stock_quantity. ' sztuk</span> </br>';}
        }
        }
        //Dla braków na magazynie:
        else
        {
            echo $backordered !== 'no' && $stock_qty <= 0 ? '<span style="color:#33b0c7; "> Dostępny na zamówienie </span>' : '<span style="color:red;"> Brak w magazynie</span>';
        }
}       

以下是它在store 页面上的外观:

variation on shop page

属性选项通常如下所示: variation options

谢谢你的帮助!

推荐答案

使用以下稍作修改的代码来获取属性术语名称,而不是slug:

add_action( 'woocommerce_after_shop_loop_item', 'display_loop_item_stock_notice', 90 );
function display_loop_item_stock_notice() {
    global $product, $wpdb;

    $is_in_stock = $product->is_in_stock();
    $backordered = $product->is_on_backorder();
    
    // Only variable products
    if($product->is_type('variable'))
    {   
        $stock_qty = $wpdb->get_var("
        SELECT SUM(pm.meta_value) FROM {$wpdb->prefix}posts as p
        JOIN {$wpdb->prefix}postmeta as pm ON p.ID = pm.post_id
        WHERE p.post_type = 'product_variation'
        AND p.post_status = 'publish' AND p.post_parent = '".get_the_id()."'
        AND pm.meta_key = '_stock' AND pm.meta_value IS NOT NULL");
        
        // Variation In Stock 
        if($stock_qty > 0)
        {
            echo '<span style="color:green; font-weight:bold;">  Opcje dostępne z magazynu:</span></br>';

            foreach ( $product->get_available_variations() as $variation_data ) {
                $variation = wc_get_product( $variation_data['variation_id'] );
                $stock = $variation->get_availability();
                $stock_quantity = $variation->get_stock_quantity();

                if($variation->is_in_stock( ) && $stock_quantity > 0) {
                    $attributes = array();

                    foreach ( $variation->get_attributes() as $meta_key => $meta ) {
                        $attributes[] = $variation->get_attribute($meta_key);
                    }
                    echo '<span style="color:green;">'. implode( ', ', $attributes ). ': ' . $stock_quantity. ' sztuk</span> </br>';
                }
            }
        }
        // Variation is not in stock
        else
        {
            echo $backordered !== 'no' && $stock_qty <= 0 ? '<span style="color:#33b0c7; "> Dostępny na zamówienie </span>' : '<span style="color:red;"> Brak w magazynie</span>';
        }
    } 
}   

代码位于您的子主题的unctions.php文件中(或在插件中).

Php相关问答推荐

PHP,ZipArchive删除一个空文件?

通过注册在Laravel中分配角色

让所有具有相同名称的产品在WooCommerce中更改价格

使用MySQLi使用连接字符串设置字符集

如果为布尔值,则 for each 循环重新启动

Regex|PHP捕获json字符串中的每个非法双引号

在 WooCommerce 中何时何地执行 woocommerce_order_status_completed_notification 挂钩?

Woocommerce API - 图像问题

从 XAMPP 运行 shell 脚本时,意外标记(附近出现语法错误

PHP Laravel 迁移文件不创建关系

将自定义保存金额移至 Woocommerce 简单产品中的价格以下

Laravel 10 中的自定义类未找到

Woocommerce 中为空时隐藏显示变体自定义字段数据

如何正确判断 PHP 是否已正确配置为使用 DOMDocument?

我需要一个正则表达式模式来获取在不包含特定字符串后面的模式中的文本

symfony/notifier + twig/inky-extra 在 dunglas/symfony-docker 中缺少 ext-xsl.

在WooCommerce中显示 checkout 的高级自定义字段(Advanced Custom Fields)并保存其值

如何修复正则表达式以在换行符后查找非数值

在 GA4 Data API V1 Beta 中使用 inListFilter 过滤器时出错

password_verify 在 PHP 7.4 中有效,但在 PHP 8.2 中无效