错误:WooCommerce避免为未登录的用户添加到购物车

我想知道是否有人可以帮助我?

我正在使用带有Woocommerce插件的Wordpress网站。

我正在使用一段代码来避免将我在本网站上发现的未登录客户的购物车添加到购物车中,除了一个问题之外,它的工作效果很好。在产品页面上不起作用。单击添加到购物车按钮时,它不会重定向到自定义登录页面,就像在类别视图页面上按按钮时一样。而是页面只是刷新。

我将代码放入functions.php文件中。然后,我尝试将其放入其他几个地方,但这没有用。谁能帮我这个忙,让我知道我是否应该将代码放到其他位置?在此先感谢您,非常感谢您的帮助!

这是问题的链接,代码如下:WooCommerce Avoid add to cart for non logged user

 // Replacing add-to-cart button in shop pages and archives pages (forn non logged in users)
add_filter( 'woocommerce_loop_add_to_cart_link','conditionally_change_loop_add_to_cart_link',10,2 );
function quantity_inputs_for_woocommerce_loop_add_to_cart_link( $html,$product ) {
    if ( ! is_user_logged_in() ) {
        $link = get_permalink($product_id);
        $button_text = __( "View product","woocommerce" );
        $html = '<a href="'.$link.'" class="button alt add_to_cart_button">'.$button_text.'</a>';
    }
    return $html;
}

// Avoid add to cart for non logged user (or not registered)
add_filter( 'woocommerce_add_to_cart_validation','logged_in_customers_validation',3 );
function logged_in_customers_validation( $passed,$product_id,$quantity) {
    if( ! is_user_logged_in() ) {
        $passed = false;

        // Displaying a custom message
        $message = __("You need to be logged in to be able adding to cart…","woocommerce");
        $button_link = get_permalink( get_option('woocommerce_myaccount_page_id') );
        $button_text = __("Login or register","woocommerce");
        $message .= ' <a href="'.$button_link.'" class="login-register button" style="float:right;">'.$button_text.'</a>';

        wc_add_notice( $message,'error' );
    }
    return $passed;
}
jiangst 回答:错误:WooCommerce避免为未登录的用户添加到购物车

是的,您可以通过将以下代码添加到活动主题function.php文件中来实现。

add_filter('woocommerce_get_price_html','login_before_addtocart');

function login_before_addtocart($price){

if(is_user_logged_in() ){
return $price;
}

else {
remove_action( 'woocommerce_after_shop_loop_item','woocommerce_template_loop_add_to_cart' );
remove_action( 'woocommerce_single_product_summary','woocommerce_template_single_add_to_cart',30 );

$response .= $price;
$response .= '<br> <a href="' .get_permalink(woocommerce_get_page_id('myaccount')). '">Login</a> to add product into cart';

return $response;
  }

}

enter image description here

enter image description here

,

首先,您对woocommerce_loop_add_to_cart_link的功能挂钩不正确。您正在使用conditionally_change_loop_add_to_cart_link而不是quantity_inputs_for_woocommerce_loop_add_to_cart_link

第二,您链接的URL使用当前产品页面ID,它将使您指向当前产品页面URL,而不是另一个页面。

除此之外,您大多使用woocommerce_add_to_cart_validation正确。

编辑:

对于产品单页,如果您在Woocommerce中查看content-single-product.php,则动作woocommerce_template_single_add_to_cart似乎可以处理“添加到购物车”表单的形式。如果您不想显示“添加到购物车”表单,则首先要从woocommerce_single_product_summary挂钩中删除操作。

if(!is_user_logged_in()) {
    remove_action('woocommerce_single_product_summary',30);
}

然后以该优先级添加您自己的操作以放入您的消息中

add_action('woocommerce_single_product_summary',function() {
    global $product_id;
    if(!is_user_logged_in()) {
        $message = __("You need to be logged in to be able adding to cart…","woocommerce");
        $button_link = get_permalink( get_option('woocommerce_myaccount_page_id') );
        $button_text = __("Login or register","woocommerce");
        $message .= ' <a href="'.$button_link.'" class="login-register button" style="float:right;">'.$button_text.'</a>';
        echo $message;
    }

});
本文链接:https://www.f2er.com/3138880.html

大家都在问