WooCommerce AJAX добавить в корзину — только простые товары

#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' );