Ошибка с: WooCommerce Избегайте добавления в корзину для незарегистрированных пользователей - PullRequest
0 голосов
/ 08 ноября 2019

Интересно, кто-нибудь может мне помочь?

Я использую сайт Wordpress с плагином Woocommerce.

Я использую кусок кода, чтобы не добавлять в корзину для не вошедших в систему клиентовкоторый я нашел на этом сайте, он прекрасно работает, за исключением одного вопроса. Это не работает на странице продукта. Когда вы нажимаете кнопку «Добавить в корзину», она не перенаправляется на пользовательскую страницу входа, как если бы вы нажимали кнопку на странице просмотра категории. Вместо этого страница просто обновляется.

Я вставил код в файл functions.php. Затем я попытался поместить его в несколько других мест, но это не сработало. Может ли кто-нибудь помочь мне с этим и дать мне знать, если есть другое место, в которое я должен добавить код? Заранее спасибо, я очень признателен за помощь!

Вот ссылка на вопрос и код ниже: WooCommerce Избегайте добавления в корзину для незарегистрированных пользователей

 // 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', 10, 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;
}

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Во-первых, ваш хук функции для woocommerce_loop_add_to_cart_link неверен. Вы используете conditionally_change_loop_add_to_cart_link вместо quantity_inputs_for_woocommerce_loop_add_to_cart_link.

Во-вторых, в вашем URL для ссылки используется идентификатор текущей страницы продукта, который будет указывать на URL текущей страницы продукта, а не на другую страницу.

Кроме этого, у вас было в основном правильно с woocommerce_add_to_cart_validation.

РЕДАКТИРОВАТЬ:

Для отдельных страниц продукта, если вы посмотрите на content-single-product.php в Woocommerce,action woocommerce_template_single_add_to_cart, похоже, обрабатывает, как выглядит форма «добавить в корзину». Если вы не хотите показывать форму добавления в корзину, сначала нужно удалить действие из хука woocommerce_single_product_summary.

`remove_action ('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 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;
    }

});
0 голосов
/ 08 ноября 2019

да, вы можете сделать это, просто добавив следующий код в файл active.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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...