#php #wordpress #woocommerce
#php #wordpress #woocommerce
Вопрос:
Я следовал этому руководству по добавлению ajax в корзину для отдельных товаров: https://aceplugins.com/ajax-add-to-cart-button-on-the-product-page-woocommerce /
У меня есть php в моих дочерних темах function.php файл, и он работает так, как должен.
Проблема, с которой я сталкиваюсь, заключается в том, что я хочу использовать remove_action( 'wp_loaded', array( 'WC_Form_Handler', 'add_to_cart_action' ), 20 );
только для простого продукта, чтобы он был доступен для других типов продуктов.
Я попытался добавить его в ace_ajax_add_to_cart_handler
функцию следующим образом:
function ace_ajax_add_to_cart_handler() {
WC_Form_Handler::add_to_cart_action();
WC_AJAX::get_refreshed_fragments();
remove_action( 'wp_loaded', array( 'WC_Form_Handler', 'add_to_cart_action' ), 20 );
}
add_action( 'wc_ajax_ace_add_to_cart', 'ace_ajax_add_to_cart_handler' );
add_action( 'wc_ajax_nopriv_ace_add_to_cart', 'ace_ajax_add_to_cart_handler' );
Я также пробовал различные функции с условными обозначениями без радости, например:
function remove_cart_action(){
if ( is_product() ) {
global $product;
if( $product->is_type( 'simple' ) ){
// Remove WC Core add to cart handler to prevent double-add
remove_action( 'wp_loaded', array( 'WC_Form_Handler', 'add_to_cart_action' ), 20 );
}
}
}
add_action( 'init', 'remove_cart_action', 20);
Любые советы будут оценены — заранее спасибо
Ответ №1:
Я обновил ваш код, но не уверен, работает ли он, вы можете проверить это!
function ace_ajax_add_to_cart_handler() {
WC_Form_Handler::add_to_cart_action();
WC_AJAX::get_refreshed_fragments();
$product_id = isset( $_REQUEST['add-to-cart'] ) ? intval( wp_unslash( $_REQUEST['add-to-cart'] ) ) : false;
if ( $product_id ) {
$product = wc_get_product( $product_id );
if ( $product->is_type( 'simple' ) ) {
remove_action( 'wp_loaded', array( 'WC_Form_Handler', 'add_to_cart_action' ), 20 );
}
}
}
add_action( 'wc_ajax_ace_add_to_cart', 'ace_ajax_add_to_cart_handler' );
add_action( 'wc_ajax_nopriv_ace_add_to_cart', 'ace_ajax_add_to_cart_handler' );