我们的电子商务内置于WordPress / WooCommerce中。该网站的其余部分在Laravel中构建。例如,当用户在domain.com/shop上时,将产品添加到他们的购物车中,然后从domain.com/shop导航到domain.com/laravel-page,我们希望将购物车图标保留在他们添加的任何产品为首。从标题小部件中删除产品并不重要,只需继续点击购物车/结帐按钮即可看到它们。有什么想法可以做到这一点吗?我知道WooCommerce设置了一系列Cookie ...这是我们可以利用的东西吗?谢谢!
答案 0 :(得分:0)
假设您的WordPress和Laravel在同一个域中,则可以对WordPress后端进行ajax调用以获取购物车数据。
jQuery进行ajax调用
(function ($) {
$( document ).ready(function() {
$.ajax ({
url: '/wp-admin/admin-ajax.php',
type: 'POST',
dataType: 'JSON',
success: function (resp) {
if (resp.success) {
// build your cart details
}
else {
// handle the error
}
},
error: function (xhr, ajaxOptions, thrownError) {
alert ('Request failed: ' + thrownError.message) ;
},
}) ;
}) ;
})(jQuery) ;
在您的主题functions.php
文件中注册ajax调用
<?php
// if the ajax call will be made from JS executed when user is logged into WP
add_action ('wp_ajax_call_your_function', 'get_woocommerce_cart_data') ;
// if the ajax call will be made from JS executed when no user is logged into WP
add_action ('wp_ajax_nopriv_call_your_function', 'get_woocommerce_cart_data') ;
function get_woocommerce_cart_data () {
global $woocommerce;
$items = $woocommerce->cart->get_cart();
// build the output array
$out = array();
foreach($items as $item => $values) {
// get product details
$getProductDetail = wc_get_product( $values['product_id'] );
$out[$item]['img'] = $getProductDetail->get_image();
$out[$item]['title'] = $getProductDetail->get_title();
$out[$item]['quantity'] = $values['quantity'];
$out[$item]['price'] = get_post_meta($values['product_id'] , '_price', true);
}
// retun the json
wp_send_json_success($out);
}