删除并替换 woocommerce 添加到购物车按钮

Remove and replace woocommerce add to cart button

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

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

});

您可以使用 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 文件。测试和工作。