php - 为 Woocommerce 中的登录用户隐藏 "Add to Cart"按钮

标签 php wordpress woocommerce product 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 );
    }
}

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

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

但这确实工作...

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

如何删除那个按钮?我的函数哪里出错了?

最佳答案

你应该试试这个:

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

代码进入您的事件子主题(或事件主题)的 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 );;
    }
}

代码进入您的事件子主题(或事件主题)的 function.php 文件。

已测试并有效

关于php - 为 Woocommerce 中的登录用户隐藏 "Add to Cart"按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48197892/

相关文章:

php - 如何替换mysql数据库中的批量href链接

javascript - 改变时,划掉表格

javascript - 使用 CSS 类动态显示 select 中的数据

javascript - Uncaught ReferenceError : onchange function is not defined (wordpress)

php - 通过mysql执行php?

php - 更改循环中的最后一项输出 (ACF)

php - 如何在WordPress页面模板中显示分类帖子?

php - Wordpress Woocommerce 第二个 sql 数据库连接问题

wordpress - Cloudfront + Woocommerce - 购物车未更新

php - 仅在 Woocommerce 结帐页面中将文本附加到总价