我正在重写AJAX函数,以便使用WooCommerce添加产品,这样我也可以将属性发送到购物车(这不是开箱即用的)。
在通过AJAX添加变量产品后,我按照更新WooCommerce购物车的说明进行了操作——这正是我想要的——但它并不完全有效。
当我注销时,一切都很好。但是,当我登录Wordpress时,PHP覆盖不起作用/被忽略。我没有收到任何错误,也没有向购物车添加任何产品。我尝试了许多不同的方法,但没有任何帮助。
html prettyprint-override">function ajax_add_to_cart_script() {
$vars = array( 'ajax_url' => admin_url( 'admin-ajax.php' ) );
wp_enqueue_script( 'wc-variation-add-to-cart', get_template_directory_uri() . '/js/jquery.add-to-cart.js', array( 'jquery' ), null, true);
wp_localize_script( 'wc-variation-add-to-cart', 'WC_VARIATION_ADD_TO_CART', $vars );
}
add_action( 'wp_enqueue_scripts', 'ajax_add_to_cart_script' );
add_action( 'wp_ajax_nopriv_woocommerce_add_variation_to_cart', 'so_27270880_add_variation_to_cart' );
function so_27270880_add_variation_to_cart() {
ob_start();
$product_id = apply_filters( 'woocommerce_add_to_cart_product_id', absint( $_POST['product_id'] ) );
$quantity = empty( $_POST['quantity'] ) ? 1 : wc_stock_amount( $_POST['quantity'] );
$variation_id = isset( $_POST['variation_id'] ) ? absint( $_POST['variation_id'] ) : '';
$variations = ! empty( $_POST['variation'] ) ? (array) $_POST['variation'] : '';
$passed_validation = apply_filters( 'woocommerce_add_to_cart_validation', true, $product_id, $quantity );
if ( $passed_validation && WC()->cart->add_to_cart( $product_id, $quantity, $variation_id, $variations ) ) {
do_action( 'woocommerce_ajax_added_to_cart', $product_id );
if ( get_option( 'woocommerce_cart_redirect_after_add' ) == 'yes' ) {
wc_add_to_cart_message( $product_id );
}
// Return fragments
WC_AJAX::get_refreshed_fragments();
} 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();
}
我确保add_action('wp_ajax_nopriv_woocommerce_add_variation_to_cart','so_27270880_add_variation_to_cart');
被添加到代码段之前,以确保它被触发,这在我注销时有效-但不是在我登录时。
有人知道为什么吗?
平@helgatheviking
一个更新,如果我在functions.php中添加以下内容,它似乎可以工作
add_action( 'wp_ajax_nopriv_woocommerce_add_variation_to_cart', 'so_27270880_add_variation_to_cart' );
add_action( 'wp_ajax_woocommerce_add_variation_to_cart', 'so_27270880_add_variation_to_cart' );
也就是说,一个用于登录管理员,另一个用于普通用户。我不确定为什么需要这两个函数,因为我看到的每一个使用这种扩展/覆盖的示例都只提到wp\uajax\unopriv\u$函数
希望这能帮助任何和我有同样问题的人。如果有人能向我解释为什么需要这样做,我很乐意听到。
问题内容: 我已经组装好了将链接添加到购物车中的可变产品的链接,就像这样,但是我对如何“刷新”购物车而不重新加载页面感到困惑。我的猜测是,我没有正确地向购物车请求中添加此AJAX,因此未调用woocommerce_add_to_cart_fragments(我相信我的购物车HTML会在此处放置刷新)。 如果有人能指出我正确的方向,我将不胜感激。Variable / AJAX / WooCommer
我已经组装了一个链接,像这样将一个可变产品添加到我的购物车,但是我不知道如何在不重新加载页面的情况下“刷新”购物车。我的猜测是,我没有正确地将此AJAX添加到购物车请求,因此,woocommerce_add_to_cart_fragments(我相信我的购物车超文本标记语言将被放置以供刷新)没有被调用。 如果有人能给我指出正确的方向,我将不胜感激。Variable/AJAX/WooCommerce
目标:在一个按钮点击中添加多个可变产品到购物车。 我试着将这段代码放入循环中,但它不起作用。 但是这种方法不能解决问题,因为我需要在一个按钮点击中添加几个产品变体。 所有的建议都将不胜感激。多谢了。
我遵循了以下关于如何为单个产品将ajax添加到购物车的指南:https://aceplugins.com/ajax-add-to-cart-button-on-the-product-page-woocommerce/ 我在我的孩子主题function.php文件中有PHP,它应该工作。 我的问题是,我只想使用时,一个简单的产品,只有这样,它是可用于其他产品类型。 我尝试将其添加到函数中,如下所示
我经营一家Woocommerce商店,该商店也提供免费产品(_常规价格=0)。客户必须选择数量并将其添加到购物车中,然后下订单才能收到产品。但这并不是Woocommerce的工作原理,它隐藏了所有价格为0的产品的“添加到购物车”链接。并且不会在购物车页面中显示它们。有没有解决这个问题的办法?非常感谢。
以前,在将产品从存档页面添加到购物车后,页面会停留在相同的页面上(而不是重定向),但这只对一个简单的产品起作用。我要做的是为可变产品也启用这个特性(在存档页面显示产品选项,而不必先到产品页面)。 [WooCommerce 3.0+]Ajax添加到可变产品存档页面上的购物车 使用此代码: 我已经做到了一半,但现在最大的问题是,在将可变产品和/或简单产品添加到cart之后,我会被重定向到product