【问题标题】:Remove and replace woocommerce add to cart button删除和替换 woocommerce 添加到购物车按钮
【发布时间】:2021-08-05 05:36:58
【问题描述】:

我正在研究一种解决方案,我在每个 WooCommerce 产品上都有一个 ACF。当自定义字段不是NULL 时,它将在之前的添加到购物车按钮下方添加一个自定义锚标记。这工作正常,但我不能让它工作,所以当上述步骤完成后,添加到购物车按钮将被钩子woocommerce_is_purchasable 删除。总体而言,这可能是一个坏主意,因为我已经看到,如果我使用 woocommerce_is_purshable,并将其设置为 false 在 woocommerce_after_add_to_cart_button 挂钩之外,它会同时删除 添加到购物车 按钮和我的定制订购目录按钮。

add_filter('woocommerce_after_add_to_cart_button', function () {
    $order_a_catalog_url = get_field('order_a_catalog_url', get_the_ID());
    $order_a_catalog_name = __('Order A Catalog', 'wp');

    if ($order_a_catalog_url != null) {
        echo '<a class="button" href="'.$order_a_catalog_url.'">'.$order_a_catalog_name.'</a>';

        add_filter( 'woocommerce_is_purchasable', '__return_false' );
    }
    
}, 100);

回答后编辑更新的代码。

add_action('woocommerce_simple_add_to_cart', function () { 
    global $product;

    $order_a_catalog_url  = get_field('order_a_catalog_url', $product->get_id());
    $order_a_catalog_name = __('Order A Catalog', 'wp');

    if ($order_a_catalog_url != null) {
        echo '<a class="button" href="'.$order_a_catalog_url.'">'.$order_a_catalog_name.'</a>';
        remove_action('woocommerce_'.$product->get_type().'_add_to_cart', 'woocommerce_'.$product->get_type().'_add_to_cart', 30);
    }

});

【问题讨论】:

    标签: wordpress woocommerce hook-woocommerce


    【解决方案1】:

    您可以使用woocommerce_simple_add_to_cart 操作挂钩来删除添加到购物车按钮。检查下面的代码。

    add_filter('woocommerce_after_add_to_cart_button', function () {
        $order_a_catalog_url = get_field('order_a_catalog_url', get_the_ID());
        $order_a_catalog_name = __('Order A Catalog', 'wp');
    
        if ($order_a_catalog_url != null) {
            echo '<a class="button" href="'.$order_a_catalog_url.'">'.$order_a_catalog_name.'</a>';
        }
        
    }, 100);
    
    
    add_action('woocommerce_simple_add_to_cart',   'wc_68661105_remove_add_to_cart_buttons_single' );
    function wc_68661105_remove_add_to_cart_buttons_single(){ 
        global $product;
        $order_a_catalog_url = get_field( 'order_a_catalog_url', $product->get_id() );
        $order_a_catalog_name = __('Order A Catalog', 'wp');
        if ($order_a_catalog_url != null) {
            echo '<a class="button" href="'.$order_a_catalog_url.'">'.$order_a_catalog_name.'</a>';
            remove_action( 'woocommerce_'.$product->get_type().'_add_to_cart', 'woocommerce_'.$product->get_type().'_add_to_cart', 30 );
        }
    }
    

    如果您还想删除 variableexternalgrouped 产品类型的“添加到购物车”按钮,则以下操作适用于其他产品类型。

    add_action('woocommerce_variable_add_to_cart', 'wc_68661105_remove_add_to_cart_buttons_single' );   
    add_action('woocommerce_external_add_to_cart', 'wc_68661105_remove_add_to_cart_buttons_single' );   
    add_action('woocommerce_grouped_add_to_cart',  'wc_68661105_remove_add_to_cart_buttons_single' );   
    

    代码将进入活动主题functions.php 文件。经过测试和工作。

    【讨论】:

    • 感谢您的帮助。我认为最终是钩子的优先级起作用了。我稍微更改了您的代码,但一切正常。在我的问题中发布了更新的代码。
    猜你喜欢
    • 2012-08-16
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 2018-10-30
    • 2020-11-03
    • 1970-01-01
    • 2017-10-10
    • 2016-07-18
    相关资源
    最近更新 更多