首页 > 解决方案 > Woocommerce - 将 ajax 数据公开给自定义 javascript

问题描述

我正在尝试构建一个自定义的 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 对象那样构建页面和调用数据更容易出错)。

感谢您的任何帮助

标签: ajaxwordpresswoocommerce

解决方案


对于遇到这种情况的任何人。

我最终不是通过使用 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();
}

推荐阅读