重命名为WooCommerce 3中的缺货产品添加到购物车按钮

时间:2017-08-22 16:44:40

标签: php wordpress woocommerce product hook-woocommerce

我想在WooCommerce中将产品售罄时,将 'Add to Cart' 重命名为 'Sold Out'

这是我的代码:

add_filter( 'add_to_cart_text', 'woo_custom_single_add_to_cart_text' );
add_filter( 'woocommerce_product_single_add_to_cart_text', 
'woo_custom_single_add_to_cart_text' );  // 2.1 +

function woo_custom_single_add_to_cart_text() {

if( $product->get_stock_quantity() == 0 )
    return __( 'Sold Out', 'woocommerce' );
} else {
    return __( 'Add to cart ', 'woocommerce' );
}

但它无效。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

更新(现在使用变量产品和变体)

您的代码中存在一些错误:

1.您需要在函数中将钩子参数设置为 $button_text $product 。 2. add_to_cart_text 已弃用,取而代之的是 woocommerce_product_add_to_cart_text

在这个更新的代码中,我添加了一个jQuery脚本,它只捕获变量产品的选定变体(在单个产品页面上)并更改按钮文本。现在这适用于所有情况。

add_filter( 'woocommerce_product_add_to_cart_text', 'customizing_add_to_cart_button_text', 10, 2 );
add_filter( 'woocommerce_product_single_add_to_cart_text', 'customizing_add_to_cart_button_text', 10, 2 );
function customizing_add_to_cart_button_text( $button_text, $product ) {

    $sold_out = __( "Sold Out", "woocommerce" );

    $availability = $product->get_availability();
    $stock_status = $availability['class'];

    // Only for variable products on single product pages
    if ( $product->is_type('variable') && is_product() )
    {
    ?>
    <script>
    jQuery(document).ready(function($) {
        $('select').blur( function(){
            if( '' != $('input.variation_id').val() && $('p.stock').hasClass('out-of-stock') )
                $('button.single_add_to_cart_button').html('<?php echo $sold_out; ?>');
            else 
                $('button.single_add_to_cart_button').html('<?php echo $button_text; ?>');

            console.log($('input.variation_id').val());
        });
    });
    </script>
    <?php
    }
    // For all other cases (not a variable product on single product pages)
    elseif ( ! $product->is_type('variable') && ! is_product() ) 
    {
        if($stock_status == 'out-of-stock')
            $button_text = $sold_out.' ('.$stock_status.')';
        else
            $button_text.=' ('.$stock_status.')';
    }
    return $button_text;
}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

此代码经过测试并正常运行

答案 1 :(得分:0)

您似乎忘记将$product声明为global

您的过滤功能应以global $product;

开头