Heim >CMS-Tutorial >WordDrücken Sie >WooCommerce -Aktionen und -filter, um den Wagen zu manipulieren
Willkommen zum zweiten Artikel in der Serie zum Mastering von WooCommerce -Aktionen und -filtern. Im vorherigen Artikel, obwohl es sehr einfach war, haben wir die Abrechnungs- und Versandadresse eines Kunden sowie das passiert, wenn ein Kunde über WooCommerce regiert und sie an eine Website von Drittanbietern wie Salesforce sendet.
In diesem zweiten Artikel werden wir den Wagen auf clevere Weise mit realen Szenarien manipulieren, denen Sie möglicherweise begegnen, während Sie Ihre E -Commerce -Website mit WooCommerce erstellen.
Das Hinzufügen eines Produkts zum CART -Programm programmatisch nur eine Codezeile. Das einzige Brainstorming, das Sie tun werden, ist, zu entscheiden, wann oder warum Sie es tun möchten. Wir werden später im dritten Teil dieses Artikels mehr darüber sprechen, wenn wir an unserem Szenario der realen Welt arbeiten.
Alles, was es braucht, um ein Produkt dem Wagen hinzuzufügen, ist Folgendes:
<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>
als Vorsicht vergewissern Sie sich, dass Sie dies nicht auf einer Aktion ausführen, die auf jeder Seite ausgeführt wird, z. Vermeiden Sie dies, wann immer möglich:
<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>
Ich habe gesehen, wie diese Frage in verschiedenen Foren und Websites mit sehr geringen Antworten unendlich viele Male gestellt wurde. Hoffentlich hilft Ihnen dies beim nächsten Mal, ein Produkt aus dem Wagen zu entfernen, und das einzige Brainstorming, das Sie tun werden, ist, wann oder warum Sie ein Produkt aus dem Wagen entfernen möchten. Der folgende Code verhindert, dass jemand mit einem Produkt aus Ihrem Geschäft ausgeht. Ich weiß nicht, warum Sie so etwas tun möchten, aber es wird die Schritte zum Entfernen des Produkts aus dem Wagen zeigen, was nicht so einfach ist wie das vorherige Beispiel, wenn wir das Produkt in den Wagen hinzufügten.
<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>
Um besser zu veranschaulichen, wie das Wagen programmatisch leeren kann, fügen wir dem Wagen eine Schaltfläche hinzu, die es den Kunden ermöglicht, darauf zu klicken und ihren Wagen zu löschen.
Verwenden wir die Aktion woocommerce_procepe_to_checkout als eine eigene Schaltfläche "Senden", die den Wagen für den aktuellen Kunden löscht.
<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>
Der nächste Schritt besteht darin, die Schaltfläche anzuhören, damit wir beim Klicken den Wagen löschen. Dafür werden wir uns in die Aktion template_redirect einbinden.
<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>
Sie werden jetzt feststellen
Incentive Products
Das Problem
Die Lösung
haben
haben
haben
mit
Sie können Ihren Kunden nicht nur das Incentive -Produkt anbieten, indem Sie sich für eines dieser Kriterien qualifizieren, sondern auch die Befugnis haben, sie zu kombinieren. In Ordnung zum Beispiel können Sie für jemanden testen, der mindestens 100 US -Dollar in seinem Warenkorb und ein Produkt aus der Kategorie „Kleidung“ hat.
Schauen wir uns einen kurzen Blick auf die Funktionen, die wir in einer Minute schreiben und was jedes in unserem Problem/Lösungsszenario tut.
get_id_from_product ($ product, $ check_variations = true) - Holt die Produkt -ID und gibt sie zurück. Berücksichtigen Sie Variations -IDs, sodass wir diese vor der Überprüfung der tatsächlichen Produkt -ID überprüfen.
qualifiziert_basedon_specific_product ($ product_required) - Überprüft, ob ein Kunde für den Anreiz qualifiziert ist oder nicht, indem die angegebene Produkt -ID als eine der Elemente im Wagen verfügt.
qualifiziert_basedon_weight ($ wight_required) - Überprüft, ob ein Kunde für den Anreiz qualifiziert ist oder nicht, indem er im Wagen ein Mindestgewicht hat.
qualifiziert_basedon_cart_total ($ Total_Required) - Überprüft, ob der Kunde für den Anreiz qualifiziert ist oder nicht, indem der Anreiz mindestens die Steuern berechnet wird.
qualifiziert_basedon_product_category ($ Kategorie) - Überprüft, ob der Kunde für den Anreiz qualifiziert ist oder nicht, indem er ein Produkt aus einer bestimmten Kategorie im Wagen hat.
add_incentive_to_cart ($ product_id) - fügt das Anreizprodukt dem Wagen hinzu, wenn der Kunde dafür qualifiziert ist
remove_incentive_from_cart ($ product_id) - entfernt das Anreizprodukt in den Wagen, wenn der Kunde sich nicht für das Produkt qualifiziert hat.
qualifiziert_for_incentive () - Hier wird die Magie geschehen, da sie die Regeln enthält, die übereinstimmen müssen, damit sich der Kunde für den Anreiz qualifizieren kann. Diese Funktion wird die Logik für unser Incentive -Programm behandeln.
<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>
Wie Sie sehen, geben diese Funktionen „wahr“ oder „falsch“ zurück, sodass es uns wirklich einfach macht, es zu vermischen und ein Anreizprogramm zu erstellen, das wirklich flexibel ist. Was jetzt noch zu tun ist, ist die Regeln, die Sie für Ihre Kunden festlegen möchten, um sich für das Incentive -Produkt zu qualifizieren und die Funktion qualifies_for_incentive () zu schreiben, die an die WooCommerce_Check_cart_items -WooCommerce -Aktion gebunden ist.
<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>
unten finden Sie einige Beispiele dafür, wie Sie diese Funktionen verwenden können, um etwas wirklich Einzigartiges zu erstellen.
Hier sind einige Beispiele, die nur eine Anforderung festlegen.
<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>
Da wir eine sehr flexible Codebasis haben, können Sie sie durcheinander bringen und Ihr Incentive -Programm wirklich einzigartig machen. Im Folgenden finden Sie einige weitere Beispiele, die zeigen, wie einfach es ist, bei Bedarf weitere Bedingungen hinzuzufügen.
<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>
Sie können sogar fortgeschrittener werden und komplexere Szenarien erstellen. Der nächste Schritt für Sie wäre, dies in eine Klasse zu verwandeln, damit Sie mehr als ein Incentive -Programm haben können, jeweils die eigenen einzigartigen Regeln für die Qualifikation.
Das ist es für diesen Artikel. Im dritten Teil dieser Serie werden wir mit Aktionen und Filtern arbeiten, die auf den neuen Produktbildschirmen des Produkts/der Bearbeitung von Produkten ausgeführt werden. Wir werden dann untersuchen, wie Sie mit nichts als der API benutzerdefinierte Felder zu den "Produktbildschirmen" hinzufügen.
Kann ich Hooks verwenden, um die WooCommerce -Produktseite zu ändern? . Beispielsweise können Sie die Aktion 'woocommerce_before_single_product_summary' verwenden, um vor der Produktzusammenfassung benutzerdefinierte Inhalte hinzuzufügen, oder die Aktion "woocommerce_after_single_product_Summary", um benutzerdefinierte Inhalte nach der Produktzusammenfassung hinzuzufügen.
Das obige ist der detaillierte Inhalt vonWooCommerce -Aktionen und -filter, um den Wagen zu manipulieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!