Во-первых, ваш хук функции для 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;
}
});