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

时间:2017-08-09 14:10:41

标签: php wordpress woocommerce product hook-woocommerce

尝试将添加到购物车按钮转换为Woocommerce网站上的下载链接(适用于免费下载的商品)

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

我错过了什么?

以下是代码:

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' );
    }
}

1 个答案:

答案 0 :(得分:1)

我重新访问,更正,压缩并测试了您的代码。所以现在它适用于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 +中)