Dalam artikel kedua ini, kami akan memanipulasi kereta itu dengan cara yang bijak dengan senario dunia sebenar yang mungkin anda hadapi semasa membuat laman web e -dagang anda menggunakan WooCommerce.
Takeaways Key
semua yang diperlukan untuk menambah produk ke kereta adalah yang berikut:
Sebagai nota berhati -hati, pastikan anda tidak menjalankan ini pada tindakan yang berjalan pada setiap halaman, seperti tindakan template_redirect atau anda akan menambah salah satu produk ini ke keranjang setiap beban halaman atau anda memuatkan semula. Elakkan melakukan ini apabila mungkin:
<span><span><?php </span></span><span><span>// Takes the Product ID and the Quantity </span></span><span><span>WC()->cart->add_to_cart( 73, 1 );</span></span>
<span><span><?php </span></span><span><span>// Takes the Product ID and the Quantity </span></span><span><span>WC()->cart->add_to_cart( 73, 1 );</span></span>
Saya telah melihat soalan ini ditanya beberapa kali dalam pelbagai forum dan laman web dengan jawapan yang sangat sedikit. Mudah -mudahan ini akan membantu anda apabila anda ingin mengeluarkan produk dari kereta dan sekali lagi, satu -satunya brainstorming yang akan anda lakukan adalah bila atau mengapa anda ingin mengeluarkan produk dari kereta. Kod berikut akan menghalang sesiapa sahaja daripada memeriksa dengan produk dari kedai anda. Saya tidak tahu mengapa anda ingin melakukan sesuatu seperti itu tetapi ia akan menunjukkan langkah -langkah untuk mengeluarkan produk dari kereta yang tidak semudah contoh sebelumnya apabila kami menambah produk ke kereta.
<span><span><?php </span></span><span><span>// template_redirect runs once for every page so you'll be </span></span><span><span>// increasing the quantity by one on every page load </span></span><span><span>add_action( 'template_redirect', 'add_random_product' ); </span></span><span><span>function add_random_product() { </span></span><span> <span>WC()->cart->add_to_cart( 73, 1 ); </span></span><span><span>}</span></span>
lebih baik menggambarkan cara mengosongkan kereta secara programatik, mari tambahkan butang ke kereta yang membolehkan pelanggan mengklik padanya dan membersihkan keranjang mereka.
mari kita gunakan tindakan woocommerce_proed_to_checkout yang menggemari butang 'hantar' kami sendiri yang akan membersihkan kereta untuk pelanggan semasa.
<span><span><?php </span></span><span><span>add_action( 'template_redirect', 'remove_product_from_cart' ); </span></span><span><span>function remove_product_from_cart() { </span></span><span> <span>// Run only in the Cart or Checkout Page </span></span><span> <span>if( is_cart() || is_checkout() ) { </span></span><span> <span>// Set the product ID to remove </span></span><span> <span>$prod_to_remove = 56; </span></span><span> </span><span> <span>// Cycle through each product in the cart </span></span><span> <span>foreach( WC()->cart->cart_contents as $prod_in_cart ) { </span></span><span> <span>// Get the Variation or Product ID </span></span><span> <span>$prod_id = ( isset( $prod_in_cart['variation_id'] ) && $prod_in_cart['variation_id'] != 0 ) ? $prod_in_cart['variation_id'] : $prod_in_cart['product_id']; </span></span><span> </span><span> <span>// Check to see if IDs match </span></span><span> <span>if( $prod_to_remove == $prod_id ) { </span></span><span> <span>// Get it's unique ID within the Cart </span></span><span> <span>$prod_unique_id = WC()->cart->generate_cart_id( $prod_id ); </span></span><span> <span>// Remove it from the cart by un-setting it </span></span><span> <span>unset( WC()->cart->cart_contents[$prod_unique_id] ); </span></span><span> <span>} </span></span><span> <span>} </span></span><span> </span><span> <span>} </span></span><span><span>}</span></span>
Langkah seterusnya adalah untuk mendengar butang untuk diklik supaya apabila ia diklik, kami membersihkan kereta itu. Untuk itu, kita akan menyambungkan tindakan template_redirect.
<span><span><?php </span></span><span><span>add_action( 'woocommerce_proceed_to_checkout', 'insert_empty_cart_button' ); </span></span><span><span>function insert_empty_cart_button() { </span></span><span> <span>// Echo our Empty Cart button </span></span><span> <span>echo '<input type="submit" name="empty_cart" value="Empty Cart" />'; </span></span><span><span>}</span></span>
Anda akan melihat sekarang bahawa selepas menekan butang, cart-emphp.php dipaparkan dan bukannya templat biasa.
Sekarang bahawa kami telah menubuhkan cara menambah atau mengeluarkan produk dari kereta, bahkan mengosongkan kereta sepenuhnya, mari kita terus membina senario dunia sebenar kami di mana mengetahui perkara semacam ini membuat perbezaan besar.
Produk InsentifMasalah
Penyelesaian
Bukan sahaja anda akan dapat menawarkan pelanggan produk insentif anda dengan memenuhi syarat kepada salah satu kriteria tersebut, anda akan mempunyai kuasa untuk menggabungkannya. Sebagai contoh, kata -kata, anda akan dapat menguji seseorang yang mempunyai sekurang -kurangnya $ 100 dalam kereta mereka dan produk dari kategori 'pakaian'.
mari kita lihat dengan cepat fungsi yang akan kita tulis dalam satu minit dan apa yang masing -masing dilakukan dalam senario masalah/penyelesaian kita.
get_id_from_product ($ produk, $ check_variations = true) - mendapat ID produk dan mengembalikannya. Mengambil id variasi ke dalam akaun supaya kami menyemaknya sebelum menyemak ID produk sebenar.
kelayakan_basedon_weight ($ weight_required) - Memeriksa sama ada pelanggan layak untuk insentif dengan mempunyai berat minimum dalam kereta.
Qualifies_basedon_product_category ($ kategori) - memeriksa sama ada pelanggan layak untuk insentif dengan mempunyai produk dari kategori tertentu dalam kereta.
Qualifies_for_incentive () - Ini adalah di mana sihir akan berlaku kerana ia akan mempunyai peraturan yang perlu dipadankan agar pelanggan memenuhi syarat untuk insentif. Fungsi ini akan mengendalikan logik untuk program insentif kami.
di bawah adalah beberapa contoh bagaimana anda boleh menggunakan fungsi ini untuk mencipta sesuatu yang benar -benar unik.
Berikut adalah beberapa contoh yang menetapkan hanya satu keperluan.
<span><span><?php </span></span><span><span>// Takes the Product ID and the Quantity </span></span><span><span>WC()->cart->add_to_cart( 73, 1 );</span></span>
<span><span><?php </span></span><span><span>// template_redirect runs once for every page so you'll be </span></span><span><span>// increasing the quantity by one on every page load </span></span><span><span>add_action( 'template_redirect', 'add_random_product' ); </span></span><span><span>function add_random_product() { </span></span><span> <span>WC()->cart->add_to_cart( 73, 1 ); </span></span><span><span>}</span></span>
<span><span><?php </span></span><span><span>add_action( 'template_redirect', 'remove_product_from_cart' ); </span></span><span><span>function remove_product_from_cart() { </span></span><span> <span>// Run only in the Cart or Checkout Page </span></span><span> <span>if( is_cart() || is_checkout() ) { </span></span><span> <span>// Set the product ID to remove </span></span><span> <span>$prod_to_remove = 56; </span></span><span> </span><span> <span>// Cycle through each product in the cart </span></span><span> <span>foreach( WC()->cart->cart_contents as $prod_in_cart ) { </span></span><span> <span>// Get the Variation or Product ID </span></span><span> <span>$prod_id = ( isset( $prod_in_cart['variation_id'] ) && $prod_in_cart['variation_id'] != 0 ) ? $prod_in_cart['variation_id'] : $prod_in_cart['product_id']; </span></span><span> </span><span> <span>// Check to see if IDs match </span></span><span> <span>if( $prod_to_remove == $prod_id ) { </span></span><span> <span>// Get it's unique ID within the Cart </span></span><span> <span>$prod_unique_id = WC()->cart->generate_cart_id( $prod_id ); </span></span><span> <span>// Remove it from the cart by un-setting it </span></span><span> <span>unset( WC()->cart->cart_contents[$prod_unique_id] ); </span></span><span> <span>} </span></span><span> <span>} </span></span><span> </span><span> <span>} </span></span><span><span>}</span></span>
<span><span><?php </span></span><span><span>add_action( 'woocommerce_proceed_to_checkout', 'insert_empty_cart_button' ); </span></span><span><span>function insert_empty_cart_button() { </span></span><span> <span>// Echo our Empty Cart button </span></span><span> <span>echo '<input type="submit" name="empty_cart" value="Empty Cart" />'; </span></span><span><span>}</span></span>
Oleh kerana kami mempunyai asas yang sangat fleksibel, anda boleh mencampurkannya dan benar -benar membuat program insentif anda unik. Berikut adalah beberapa contoh lagi yang menunjukkan betapa mudahnya untuk menambah lebih banyak keadaan yang diperlukan.
<span><span><?php </span></span><span><span>// Let's wait for the button to be clicked on </span></span><span><span>add_action( 'template_redirect', 'empty_cart_button_handler' ); </span></span><span><span>function empty_cart_button_handler() { </span></span><span> <span>if( isset( $_POST['empty_cart'] ) && $_SERVER['REQUEST_METHOD'] == "POST" ) { </span></span><span> <span>WC()->cart->empty_cart( true ); </span></span><span> <span>} </span></span><span><span>}</span></span>
<span><span><?php </span></span><span><span>/** </span></span><span><span> * Will extract the Variation ID if available otherwise it will get the Product ID </span></span><span><span> * <span>@param $product Product </span></span></span><span><span> * <span>@param <span>bool</span> $check_variations Whether or not to check for variation IDs </span></span></span><span><span> * <span>@return <span>mixed</span> </span></span></span><span><span> */ </span></span><span><span>function get_id_from_product( $product, $check_variations = true ) { </span></span><span> <span>// Are we taking variations into account? </span></span><span> <span>if( $check_variations ) { </span></span><span> <span>// Ternary Operator </span></span><span> <span>// http://php.net/manual/en/language.operators.comparison.php </span></span><span> <span>return ( isset( $product['variation_id'] ) </span></span><span> <span>&& ! empty( $product['variation_id']) </span></span><span> <span>&& $product['variation_id'] != 0 ) </span></span><span> <span>? $product['variation_id'] </span></span><span> <span>: $product['product_id']; </span></span><span> <span>} else { </span></span><span> <span>// No variations, just need the product IDs </span></span><span> <span>return $product['product_id']; </span></span><span> <span>} </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Checks the existence of a specific product in the cart </span></span><span><span> * <span>@param $product_required The Product ID required to be in the cart </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span><span>function qualifies_basedon_specific_product( $product_required ) { </span></span><span> <span>/* </span></span><span><span> * We only want to run this on the cart or checkout page </span></span><span><span> */ </span></span><span> <span>if( is_cart() || is_checkout () ) { </span></span><span> <span>foreach( WC()->cart->cart_contents as $key => $product_in_cart ) { </span></span><span> <span>if( $product_required == get_id_from_product( $product_in_cart ) ) { </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>// Return false in case anything fails </span></span><span> <span>return false; </span></span><span> <span>} </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Checks the cart for the weight required to qualify for the incentive </span></span><span><span> * <span>@param $weight_required Weight Required </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span><span>function qualifies_basedon_weight( $weight_required ) { </span></span><span> </span><span> <span>/* </span></span><span><span> * We only want to run this on the cart or checkout page </span></span><span><span> */ </span></span><span> <span>if( is_cart() || is_checkout () ) { </span></span><span> <span>if( $weight_required >= WC()->cart->cart_contents_weight ) { </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>// Return false in case anything fails </span></span><span> <span>return false; </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Checks the cart for the Total excluding taxes </span></span><span><span> * <span>@param $total_required </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span><span>function qualifies_basedon_cart_total( $total_required ) { </span></span><span> <span>/* </span></span><span><span> * We only want to run this on the cart or checkout page </span></span><span><span> */ </span></span><span> <span>if( is_cart() || is_checkout () ) { </span></span><span> <span>if( WC()->cart->subtotal_ex_tax >= $total_required ) { </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>// Return false in case anything fails </span></span><span> <span>return false; </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Checks the cart to verify whether or not a product from a Category is in the cart </span></span><span><span> * <span>@param $category Accepts the Product Category Name, ID, Slug or array of them </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span><span>function qualifies_basedon_product_category( $category ) { </span></span><span> <span>foreach( WC()->cart->cart_contents as $key => $product_in_cart ) { </span></span><span> <span>if( has_term( $category, 'product_cat', get_id_from_product( $product_in_cart, false ) ) ) { </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>// Return false in case anything fails </span></span><span> <span>return false; </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Adds a specific product to the cart </span></span><span><span> * <span>@param $product_id Product to be added to the cart </span></span></span><span><span> */ </span></span><span><span>function add_incentive_to_cart( $product_id ) { </span></span><span> <span>// Check the cart for this product </span></span><span> <span>$cart_id = WC()->cart->generate_cart_id( $product_id ); </span></span><span> <span>$prod_in_cart = WC()->cart->find_product_in_cart( $cart_id ); </span></span><span> <span>// Add the product only if it's not in the cart already </span></span><span> <span>if( ! $prod_in_cart ) { </span></span><span> <span>WC()->cart->add_to_cart( $product_id ); </span></span><span> <span>} </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Removes a specific product from the cart </span></span><span><span> * <span>@param $product_id Product ID to be removed from the cart </span></span></span><span><span> */ </span></span><span><span>function remove_incentive_from_cart( $product_id ) { </span></span><span> <span>$prod_unique_id = WC()->cart->generate_cart_id( $product_id ); </span></span><span> <span>// Remove it from the cart by un-setting it </span></span><span> <span>unset( WC()->cart->cart_contents[$prod_unique_id] ); </span></span><span><span>}</span></span>
anda juga boleh mendapatkan lebih maju daripada itu dan membuat senario yang lebih kompleks. Langkah seterusnya untuk anda adalah untuk mengubahnya menjadi 'kelas' supaya anda boleh mempunyai lebih daripada satu program insentif, masing -masing dengan set peraturan yang unik untuk kelayakan.
itu untuk artikel ini. Di bahagian ketiga siri ini, kami akan bekerjasama dengan tindakan dan penapis yang dijalankan pada skrin produk/edit produk baru. Kami kemudian akan meneroka cara menambah medan tersuai ke 'skrin produk' menggunakan apa -apa kecuali API.
Untuk menukar teks butang dalam WooCommerce, anda boleh menggunakan penapis 'woocommerce_order_button_text'. Penapis ini membolehkan anda mengubah suai teks butang pesanan pada halaman checkout.
Untuk mengubah suai butiran pesanan dalam WooCommerce, anda boleh menggunakan tindakan 'Woocommerce_order_details_after_order_table'. Tindakan ini membolehkan anda menambah kandungan tersuai selepas jadual pesanan pada halaman butiran pesanan.
Bagaimana saya boleh menukar harga produk dalam wooCommerce menggunakan cangkuk? , Anda boleh menggunakan penapis 'Woocommerce_get_price_html'. Penapis ini membolehkan anda mengubah suai harga HTML, yang merangkumi harga produk.
Atas ialah kandungan terperinci Tindakan dan penapis WooCommerce untuk memanipulasi kereta. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!