Di toko e-niaga:
Ada item yang ditampilkan di Beranda dan masing-masing item memiliki tombol "Tambahkan ke Troli" di bawahnya. Ketika tombol ini diklik, item ditambahkan ke troli. Jika tombol ini diklik lagi, Kuantitas item yang sudah ada di troli, bertambah 1. Saya yakin ini adalah loop . Sejauh ini bagus.
Pada halaman Produk Tunggal, ada tombol "Tambahkan ke Troli". Ketika tombol ini diklik, item tersebut akan ditambahkan ke troli. Ada juga kotak teks input Kuantitas yang dapat digunakan untuk mengubah kuantitas. Ini juga baik-baik saja.
MASALAH:
Saya perlu membedakan antara tombol "Tambahkan ke Troli" yang diklik dalam loop (saat ini di Beranda, tetapi juga dapat digunakan pada halaman lain seperti halaman Arsip, dll.) Vs tombol "Tambahkan ke Troli" yang diklik pada halaman Produk Tunggal. Berdasarkan perbedaan ini, inilah yang perlu saya lakukan:
- Jika tombol "Tambahkan ke Troli" yang muncul dalam loop diklik, ambil Jumlah item ini yang sudah ada di troli menggunakan
$cart_item_key
, tambahkan 1, dan kirim ke fungsi kustom yang akan melakukan pemrosesan tambahan dan menyimpan detailnya ke troli lagi. - Jika tombol "Tambahkan ke Troli" muncul di halaman Produk Tunggal diklik, ambil Jumlah item ini yang sudah ada di troli menggunakan
$cart_item_key
, gandakan dengan 3 dan kirim ke fungsi kustom yang akan melakukan pemrosesan tambahan dan menyimpan detail ke troli lagi. - Dalam kedua kasus di atas, Kuantitas sedang diubah, berdasarkan berbagai logika dan Kuantitas ini perlu dikirim ke pemanggilan fungsi kustom.
APA YANG SAYA MENCOBA:
Saya mencoba kode berikut:
add_action('woocommerce_add_to_cart', 'custom_action_add_to_cart', 20, 6);
function custom_action_add_to_cart($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data)
{
$cart = WC()->cart->get_cart();
$product = wc_get_product($product_id);
// NEED TO RUN CUSTOM CODE HERE BASED ON THE CHECKS
if (add to cart within loop is clicked) {
// Get existing $quantity_from_cart from cart using $cart_item_key, but how????
$new_quantity = $quantity_from_cart + 1;
}
else if (add to cart on single product page is clicked) {
// Get existing $quantity_from_cart from cart using $cart_item_key, but how????
$new_quantity = $quantity_from_cart * 3;
}
// Need to send the $new_quantity along with the $cart_item_key to the custom function so that the data can be saved using $cart_item_key
my_custom_function($new_quantity, $cart_item_key);
}
function my_custom_function($new_quantity, $cart_item_key)
{
echo $new_quantity;
WC()->cart->cart_contents[$cart_item_key]['custom_quantity'] = $new_quantity;
WC()->cart->set_session();
}
Masalah dengan kode di atas adalah bahwa jika saya tidak memiliki if... else if...
logika, maka kode dijalankan tanpa memperhatikan di mana tombol "Add to Cart" berada. Dengan kata lain, apakah saya mengklik tombol "Tambahkan ke Troli" yang terletak di loop (Beranda, Arsip halaman atau halaman apa pun yang menggunakan loop) atau saya klik tombol "Tambahkan ke Troli" yang terletak di halaman Produk Tunggal, kode di atas dijalankan tanpa adanya if... else if...
logika.
Jadi, saya ingin menjalankan kode terpisah ketika tombol "Tambahkan ke Troli" yang terletak di loop diklik (terlepas dari lokasinya, apakah Beranda, Arsip, dll.) Dan menjalankan kode yang berbeda ketika tombol "Tambahkan ke Troli" yang terletak pada halaman Produk Tunggal diklik. Bagaimana saya bisa mencapai ini?
Mengharapkan sesuatu seperti ini:
- Jika tombol yang muncul di dalam loop diklik -> Lakukan ini.
- Jika tombol yang muncul di halaman Produk Tunggal diklik -> Lakukan itu.
sumber
Anda dapat mencoba cara ini:
Tetapi Anda perlu memeriksa pengaturan Anda.
Settings > Permalinks
.sumber
Anda dapat menggunakan
is_product()
,is_product_category()
berfungsisumber
$new_quantity = $quantity_from_cart * 3;
berfungsi. Tapi ternyata tidak. Ini hanya menambah jumlah yang ada saat ini dalam keranjang, tetapi TIDAK mengalikan kuantitas dengan 3 . Bagaimana cara memperbaikinya?if ( is_product() )
ini TIDAK dijalankan. Sepertinya saya tidak dapat menemukan alasannya! Apakah penting bahwa itu adalah tombol Add to Cart AJAX ??Ada beberapa solusi yang bisa saya pikirkan. Tapi ini satu:
Kita dapat menambahkan input tersembunyi di dalam formulir, bahwa kode di atas melakukannya.
Kemudian dapat memeriksa nilainya seperti:
Harap dicatat bahwa ini hanyalah sebuah gagasan dan bukan solusi lengkap ... Anda harus menjaga tombol ajax.
sumber
$button_location
dalam permintaan ..