Woocommerce Ajax以编程方式添加到购物车
发布时间:2020-12-16 02:50:26 所属栏目:百科 来源:网络整理
导读:我有这个按钮: a href="http://my-site/checkout/" target="_blank" class="dt-sc-button"bla bla/a 此按钮位于我的homebage上,由页面构建器生成.我想要实现的是当有人点击按钮时,它会将它们带到结账处,并将产品添加到购物车.我知道这可以通过URL完成,但我
我有这个按钮:
<a href="http://my-site/checkout/" target="_blank" class="dt-sc-button">bla bla</a> 此按钮位于我的homebage上,由页面构建器生成.我想要实现的是当有人点击按钮时,它会将它们带到结账处,并将产品添加到购物车.我知道这可以通过URL完成,但我需要让这个按钮做其他事情(客户的想法). 所以现在我被困在这里: JQuery的 jQuery(document).ready(function($){ $(".remove-all").click(function(){ $.ajax({ url: "wp-admin/admin-ajax.php",data: 'myajax' }); }); }); 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(); } 我是一个javascript noob,所以你能指出我正确的方向,或者给我一个暗示我做错了什么. 提前致谢! 解决方法
正如我在评论中提到的,你几乎可以借用核心WooCommerce功能.
首先,这是我们将尝试ajaxify的按钮: <a href="http://local.wordpress.dev/checkout/" class="button test-button">bla bla</a> 其次,我们将加载我们的自定义脚本并传递重要的变量,例如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 ); } 现在我们将编写我们的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(); } 最后是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; } }); }); }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |