隐藏 Woocommerce 中登录用户的“添加到购物车”按钮

Dr.*_*MTR 3 php wordpress product woocommerce hook-woocommerce

在我的网站上(使用 Woocommerce 3.2.6),我想仅为登录用户隐藏“添加到购物车”按钮。

我有这个代码:

add_action('init', 'hide_price_add_cart_logged_in');
function hide_price_add_cart_logged_in() {
    if ( is_user_logged_in() ) {       
        remove_action( 'woocommerce_after_shop_loop_item', 
            'woocommerce_template_loop_add_to_cart', 10 );
        remove_action( 'woocommerce_single_product_summary', 
            'woocommerce_template_single_add_to_cart', 30 );
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:有人建议我使用这个:

add_action('init', 'hide_price_add_cart_logged_in');
function hide_price_add_cart_logged_in() { 
    if ( is_user_logged_in() ) {       
        remove_action( 'woocommerce_after_shop_loop_item', 
            'woocommerce_template_loop_add_to_cart', 10 );
        remove_action( 'woocommerce_single_product_summary', 
            'woocommerce_template_single_add_to_cart', 30 );
        return WooCommerce::instance();
    }
}
Run Code Online (Sandbox Code Playgroud)

但这没有...

我已将此代码插入到我的主题的functions.php 文件中,但它似乎没有进行任何更改。在检查某些产品时,我仍然看到“添加到购物车”按钮。

怎么去掉那个按钮呢?我的函数哪里出错了?

Loi*_*tec 5

你应该尝试这个:

add_action( 'woocommerce_after_shop_loop_item', 'remove_loop_add_to_cart_button', 1 );
function remove_loop_add_to_cart_button() {
    // Only for logged in users
    if( ! is_user_logged_in() ) return;

    remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
}


add_action( 'woocommerce_single_product_summary', 'remove_add_to_cart_button', 1 );
function remove_add_to_cart_button() {
    // Only for logged in users
    if( ! is_user_logged_in() ) return;

    global $product;

    // For variable product types (keeping attribute select fields)
    if( $product->is_type( 'variable' ) ) {
        remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation_add_to_cart_button', 20 );
    }
    // For all other product types
    else {
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
    }
}
Run Code Online (Sandbox Code Playgroud)

代码位于活动子主题(或活动主题)的 function.php 文件中。

经过测试并有效


您可以将其替换为链接到产品的按钮,而不是在档案页面(例如商店)上隐藏“添加到购物车”按钮。所以代码将改为:

// Replacing the button add to cart by a link to the product in Shop and archives pages
add_filter( 'woocommerce_loop_add_to_cart_link', 'replace_loop_add_to_cart_button', 10, 2 );
function replace_loop_add_to_cart_button( $button, $product  ) {
    // Only for logged in users
    if( ! is_user_logged_in() ) return;

    $button_text = __( "View product", "woocommerce" );
    $button = '<a class="button" href="' . $product->get_permalink() . '">' . $button_text . '</a>';

    return $button;
}

add_action( 'woocommerce_single_product_summary', 'remove_add_to_cart_button', 1 );
function remove_add_to_cart_button() {
    // Only for logged in users
    if( ! is_user_logged_in() ) return;

    global $product;

    // For variable product types (keeping attribute select fields)
    if( $product->is_type( 'variable' ) ) {
        remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation_add_to_cart_button', 20 );
    }
    // For all other product types
    else {
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );;
    }
}
Run Code Online (Sandbox Code Playgroud)

代码位于活动子主题(或活动主题)的 function.php 文件中。

经过测试并有效