关于将永久WooCommerce购物车数据保留在同一域中非WordPress页面标题中的想法

时间:2018-12-08 18:16:26

标签: wordpress woocommerce

我们的电子商务内置于WordPress / WooCommerce中。该网站的其余部分在Laravel中构建。例如,当用户在domain.com/shop上时,将产品添加到他们的购物车中,然后从domain.com/shop导航到domain.com/laravel-page,我们希望将购物车图标保留在他们添加的任何产品为首。从标题小部件中删除产品并不重要,只需继续点击购物车/结帐按钮即可看到它们。有什么想法可以做到这一点吗?我知道WooCommerce设置了一系列Cookie ...这是我们可以利用的东西吗?谢谢!

1 个答案:

答案 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);
}