Mar*_*oan 6 ajax wordpress woocommerce
我有这个按钮:
<a href="http://my-site/checkout/" target="_blank" class="dt-sc-button">bla bla</a>
Run Code Online (Sandbox Code Playgroud)
此按钮位于我的homebage上,由页面构建器生成.我想要实现的是当有人点击按钮时,它会将它们带到结账处,并将产品添加到购物车.我知道这可以通过URL完成,但我需要让这个按钮做其他事情(客户的想法).
所以现在我被困在这里:
JQuery的
jQuery(document).ready(function($){     
$(".remove-all").click(function(){
    $.ajax({
        url: "wp-admin/admin-ajax.php",
        data: 'myajax'
    });
  });
});
Run Code Online (Sandbox Code Playgroud)
PHP
add_action('wp_ajax_myajax', 'myajax');
add_action('wp_ajax_nopriv_myajax', 'myajax');
    function myajax() {
        global $woocommerce;
        $product_id = 264;
    $woocommerce->cart->add_to_cart($product_id);
    die();
    }
Run Code Online (Sandbox Code Playgroud)
我是一个javascript noob,所以你能指出我正确的方向,或者给我一个暗示我做错了什么.
提前致谢!
正如我在评论中提到的,你几乎可以借用核心WooCommerce功能.
首先,这是我们将尝试ajaxify的按钮:
<a href="http://local.wordpress.dev/checkout/" class="button test-button">bla bla</a>
Run Code Online (Sandbox Code Playgroud)
其次,我们将加载我们的自定义脚本并传递重要的变量,例如admin ajax和checkout urls.
add_action( 'wp_enqueue_scripts', 'so_load_script', 20 );
function so_load_script(){
    wp_enqueue_script( 'so_test', plugins_url( 'js/test.js', __FILE__ ) );
    $i18n = array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'checkout_url' => get_permalink( wc_get_page_id( 'checkout' ) ) );
    wp_localize_script( 'so_test', 'SO_TEST_AJAX', $i18n );
}
Run Code Online (Sandbox Code Playgroud)
现在我们将编写我们的ajax回调函数,它几乎逐字地从WooCommerce核心复制,只需进行一些小的修改:
add_action('wp_ajax_myajax', 'myajax_callback');
add_action('wp_ajax_nopriv_myajax', 'myajax_callback');
    /**
     * AJAX add to cart.
     */
function myajax_callback() {        
        ob_start();
        //$product_id        = 264;
        $product_id        = 34;
        $quantity          = 1;
        $passed_validation = apply_filters( 'woocommerce_add_to_cart_validation', true, $product_id, $quantity );
        $product_status    = get_post_status( $product_id );
        if ( $passed_validation && WC()->cart->add_to_cart( $product_id, $quantity ) && 'publish' === $product_status ) {
            do_action( 'woocommerce_ajax_added_to_cart', $product_id );
            wc_add_to_cart_message( $product_id );
        } else {
            // If there was an error adding to the cart, redirect to the product page to show any errors
            $data = array(
                'error'       => true,
                'product_url' => apply_filters( 'woocommerce_cart_redirect_after_error', get_permalink( $product_id ), $product_id )
            );
            wp_send_json( $data );
        }
        die();
}
Run Code Online (Sandbox Code Playgroud)
最后的内容是test.js:
jQuery(document).ready(function($){     
  $(".test-button").click(function(e){ 
    e.preventDefault();  // Prevent the click from going to the link
    $.ajax({
        url: wc_add_to_cart_params.ajax_url,
        method: 'post',
        data: { 
            'action': 'myajax'
        }
    }).done( function (response) {
          if( response.error != 'undefined' && response.error ){
            //some kind of error processing or just redirect to link
            // might be a good idea to link to the single product page in case JS is disabled
            return true;
          } else {
            window.location.href = SO_TEST_AJAX.checkout_url;
          }
    });
  });
});
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           18870 次  |  
        
|   最近记录:  |