【问题标题】:Woocommerce redirect to cart with already added productsWoocommerce 重定向到已添加产品的购物车
【发布时间】:2019-10-23 08:18:58
【问题描述】:

我有一个具体问题,包括 WordPress、Woocommerce 和 c#。

我的 C# 应用程序允许用户从 Woocommerce 商店访问产品。选择一些产品后,用户可以选择将订单发送到他的电子邮件,看看是否一切正常。在电子邮件的底部,我想添加一个“转到购物车”按钮。

此按钮应将用户重定向到购物车/结帐页面,其中包含已添加的产品。为了做到这一点,我需要一个特定的链接。我知道有一种方法可以添加一个产品,但在这种情况下,我需要将用户引导到一个装满不同产品和数量的购物车。我想知道是否有一种在 javascript 中执行此操作的方法(执行多个链接的按钮并打开装满产品的购物车)。

或者,我可以在发送邮件时更早地创建此购物车,并添加一个打开特定会话的按钮。但是,我不知道该怎么做,以及如何保持这个会话,例如 3 天。

我不知道什么代码在这里应该有用,所以我不发布任何代码。如果您认为您需要我的一些代码,请写评论,我会更新帖子。

我知道有一个代码可以粘贴到 WordPress 中,它允许您在一个链接中添加各种产品,但是,由于此应用程序的特殊性(客户端不得编辑任何 WordPress 文件),我不能去做吧。

您对如何解决它有任何想法吗?

【问题讨论】:

  • 堆栈溢出是为了解决编程问题,如果您向我们展示代码,或者至少尝试一下,您更有可能获得帮助。堆栈溢出指南说您应该发布一个最小的可重现示例。请添加一个。

标签: javascript c# wordpress woocommerce


【解决方案1】:

默认情况下,woocommerce 可以通过 url 一次添加一个产品: ...购物车/?添加到购物车 = 12

默认情况下,如果不更改 WOcommerce 中的任何内容,您将无法通过按钮一次添加所有这些产品,您需要更改默认代码。

一个简单的解决方案是创建一个 wordpress 插件,添加通过 url 接受添加多个产品的功能,客户端只需添加这个 wordpress 插件,它就会工作。

我建议您在生产前创建一个本地环境进行测试。

文档链接:https://developer.wordpress.org/plugins/plugin-basics/

这是一个代码示例,您需要在 plugins 文件夹中创建一个文件夹并为其命名示例:首先是 my_plugin,然后在其中创建一个名为 my_plugin.php 的文件

在此文件中添加以下代码:

<?php
/**
 * Plugin Name: YOUR PLUGIN NAME
*/

function woocommerce_maybe_add_multiple_products_to_cart() {
// Make sure WC is installed, and add-to-cart qauery arg exists, and contains at least one comma.
if ( ! class_exists( 'WC_Form_Handler' ) || empty( $_REQUEST['add-to-cart'] ) || false === strpos( $_REQUEST['add-to-cart'], ',' ) ) {
    return;
}

// Remove WooCommerce's hook, as it's useless (doesn't handle multiple products).
remove_action( 'wp_loaded', array( 'WC_Form_Handler', 'add_to_cart_action' ), 20 );

$product_ids = explode( ',', $_REQUEST['add-to-cart'] );
$count       = count( $product_ids );
$number      = 0;

foreach ( $product_ids as $product_id ) {
    if ( ++$number === $count ) {
        // Ok, final item, let's send it back to woocommerce's add_to_cart_action method for handling.
        $_REQUEST['add-to-cart'] = $product_id;

        return WC_Form_Handler::add_to_cart_action();
    }

    $product_id        = apply_filters( 'woocommerce_add_to_cart_product_id', absint( $product_id ) );
    $was_added_to_cart = false;
    $adding_to_cart    = wc_get_product( $product_id );

    if ( ! $adding_to_cart ) {
        continue;
    }

    $add_to_cart_handler = apply_filters( 'woocommerce_add_to_cart_handler', $adding_to_cart->product_type, $adding_to_cart );

    /*
     * Sorry.. if you want non-simple products, you're on your own.
     *
     * Related: WooCommerce has set the following methods as private:
     * WC_Form_Handler::add_to_cart_handler_variable(),
     * WC_Form_Handler::add_to_cart_handler_grouped(),
     * WC_Form_Handler::add_to_cart_handler_simple()
     *
     * Why you gotta be like that WooCommerce?
     */
    if ( 'simple' !== $add_to_cart_handler ) {
        continue;
    }

    // For now, quantity applies to all products.. This could be changed easily enough, but I didn't need this feature.
    $quantity          = empty( $_REQUEST['quantity'] ) ? 1 : wc_stock_amount( $_REQUEST['quantity'] );
    $passed_validation = apply_filters( 'woocommerce_add_to_cart_validation', true, $product_id, $quantity );

    if ( $passed_validation && false !== WC()->cart->add_to_cart( $product_id, $quantity ) ) {
        wc_add_to_cart_message( array( $product_id => $quantity ), true );
    }
}
}

 // Fire before the WC_Form_Handler::add_to_cart_action callback.
 add_action( 'wp_loaded',        'woocommerce_maybe_add_multiple_products_to_cart', 15 );

有一点很重要,此代码只是一个示例,您可以从如下网址添加产品:http://shop.com/shop/cart/?add-to-cart=3001,3282 只需传递您要更新的产品 ID。

这个修改 woocommerce 并因此允许通过 url 进行各种产品的代码不是我开发的,我在下面的链接中以它为例: Adding multiple items to WooCommerce cart at once

在此链接中,您将看到一些建议。我所做的只是提供一个可能有助于解决您的问题的灯。 开发一个不会更改客户端站点源代码的插件是最好的选择,如果出现问题或失败,只需禁用一切恢复正常;) 我希望我能在某些方面有所帮助。

【讨论】:

    猜你喜欢
    • 2018-03-31
    • 1970-01-01
    • 2014-11-21
    • 2021-06-10
    • 1970-01-01
    • 2021-08-22
    • 2021-06-28
    • 2021-06-09
    • 2012-10-29
    相关资源
    最近更新 更多