woocommerce_single_product_summary 挂钩中的重复添加到购物车按钮问题

Duplicated add to cart button issue in woocommerce_single_product_summary hook

尝试在 Woocommerce 网站 (对于可免费下载的项目) 上将添加到购物车按钮变成下载 link。

我在下面设置的代码可以做到这一点,但它也复制了添加到购物车按钮。所以我最终得到了文件下载 link + 一个额外的添加到购物车按钮。

我错过了什么?

代码如下:

remove_action( 'woocommerce_single_product_summary', 
'woocommerce_template_single_add_to_cart', 30 );
add_action( 'woocommerce_single_product_summary', 
'itl_woocommerce_template_single_add_to_cart', 30 );

/*
 * replace WooCommerce add-to-cart button with download link when product is 
downloadable & free
 */

function itl_woocommerce_template_single_add_to_cart() {
    global $product;
    if ( $product->is_downloadable('yes') ) {
        if ( $product->get_price() > 0 ) {
            do_action( 'woocommerce_' . $product->product_type . 
 '_add_to_cart' );
        } else {
            $downloads = $product->get_files();
            foreach( $downloads as $key => $download ) {
                echo '<p class="download-link"><a href="' . esc_url( 
$download['file'] ) . '">' . $download['name'] . '</a></p>';
            }
        }
    } else {
        do_action( 'woocommerce_' . $product->product_type . '_add_to_cart' );
    }
}

我已经重新访问、更正、压缩并测试了您的代码。所以现在它适用于 WC 版本 3+:

add_action( 'woocommerce_single_product_summary', 'customizing_single_add_to_cart', 1 );
function customizing_single_add_to_cart(){
    remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
    add_action('woocommerce_single_product_summary', function(){
        global $product;
        if ( $product->is_downloadable() && $product->get_price() <= 0 )
            foreach( $product->get_downloads() as $key => $download )
                echo '<p class="download-link"><a href="' . esc_url( $download['file'] ) . '">' . $download['name'] . '</a></p>';
        else
            woocommerce_template_single_add_to_cart();
    }, 30);
}

代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。

此代码已经过测试并有效 (在 WooCommerce 版本 3+ 中)