簡體   English   中英

Woocommerce 重定向到已添加產品的購物車

[英]Woocommerce redirect to cart with already added products

我有一個具體問題,包括 WordPress、Woocommerce 和 c#。

我的 C# 應用程序允許用戶從 Woocommerce 商店訪問產品。 選擇一些產品后,用戶可以選擇將訂單發送到他的 email,看看是否一切正常。 在 email 的底部,我想添加一個“轉到購物車”按鈕。

此按鈕應將用戶重定向到購物車/結帳頁面,其中包含已添加的產品。 為了做到這一點,我需要一個特定的鏈接。 我知道有一種方法可以添加一個產品,但在這種情況下,我需要將用戶引導到一個裝滿不同產品和數量的購物車。 我想知道在 javascript(執行多個鏈接和打開裝滿產品的購物車的按鈕)中是否有一種方法。

或者,我可以在發送郵件時更早地創建此購物車,並添加一個按鈕以打開特定的 session。 但是,我不知道該怎么做,以及如何維護這個 session 例如 3 天。

我不知道什么代碼在這里應該有用,所以我不發布任何代碼。 如果您認為您需要我的一些代碼,請寫評論,我會更新帖子。

我知道有一個代碼可以粘貼到 WordPress 中,它允許您在一個鏈接中添加各種產品,但是,由於此應用程序的特殊性(客戶不得編輯任何 WordPress 文件),我不能這樣做。

您對如何解決它有任何想法嗎?

默認情況下 woocommerce 您可以通過 url 一次添加一個產品: ... cart /? 添加到購物車 = 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 );

重要的是,此代碼只是一個示例,您可以像這樣從 url 添加產品: http://shop.com/shop/cart/?add-to-cart=3001,3282只需傳遞您想要的產品 ID更新。

這段代碼修改了 woocommerce,從而允許url的各種產品,不是我開發的

在此鏈接中,您將看到一些建議。 我所做的只是提供一個可能有助於解決您的問題的燈。 開發一個不會更改客戶端站點源代碼的插件是最好的選擇,如果出現問題或失敗,只需禁用一切恢復正常;)我希望我能以某種方式提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM