![](/img/trans.png)
[英]WooCommerce cookies and sessions - Get the current products in cart
[英]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.