Woocommerce-将Ajax数据暴露给自定义javascript

时间:2018-12-09 19:48:58

标签: ajax wordpress woocommerce

我正在尝试构建自定义的Woocommerce产品列表页面-我已经对其进行了设置。

但是,当我尝试将AJAX添加到购物车时,我无法弄清楚如何使用woocommerce的ajax端点来本地化脚本。

我发现了一个有意义的代码段

$.post(wc_add_to_cart_params.wc_ajax_url.toString().replace('%%endpoint%%', 'add_to_cart'), data, function (response) {

但是,我不知道如何将wc_add_to_cart_params暴露给我的脚本。我发现的所有woocommerce文档都希望您对那些恶作剧进行修改,以修改他们已经发布的内容,但是我不想这样做。我想制作自己的模板并手动将其触发。

所以 1如何将各种woocommerce端点定位到我的脚本中? (我了解如何使用localize_script,但我不知道如何在我的functions.php文件中获取ajax端点。

2是否有使用woocommerce的合法文档?他们网站上的文档看上去确实很糟糕,并且仅用于非常小的修改或属于钩子范式的修改。 (我绝对不喜欢这样做,因为我发现它比创建页面和像调用其他任何WP对象那样调用数据要复杂得多,而且更容易出错)。

谢谢您的帮助

1 个答案:

答案 0 :(得分:0)

对于遇到此问题的任何人。

我最终不是通过使用WC Ajax解决此问题,而是通过编写自己的Ajax处理程序并手动将其添加到购物车中来解决此问题。该功能尚未完成,仍然需要适当的响应处理,但是如果您遇到与我相同的挂断,就足以让您开始工作。

function cabinets_add_to_cart() {
    ob_start();

    $productID = $_POST['productID'];
    $quantity = $_POST['quantity'];
    $passed_validation = apply_filters('woocommerce_add_to_cart_validation', true, $productID, $quantity);
    $product_status = get_post_status($productID);

    if( $passed_validation && WC()->cart->add_to_cart( $productID, $quantity) && 'publish' === $product_status) {
        do_action( 'woocommerce_aax_added_to_cart', $productID);
        wc_add_to_cart_message($productID);
    }
    else {
        $data = array(
            'error' => true,
            'product_url' => apply_filters( 'woocommerce_cart_redirect_after_error', get_permalink($productID), $productID)
        );

        wp_send_json($data);
    }
    die();
}