Maison >Tutoriel CMS >WordPresse >Actions et filtres WooCommerce pour manipuler le chariot
Bienvenue dans le deuxième article de la série sur la maîtrise des actions et des filtres WooCommerce. Dans l'article précédent, même s'il était très basique, nous avons couvert la gestion d'une adresse de facturation et d'expédition d'un client ainsi que ce qui se passe lorsqu'un client s'inscrit via WooCommerce et qu'il les envoie à un site Web tiers, comme Salesforce.
Dans ce deuxième article, nous manipulerons le panier de manière intelligente avec des scénarios du monde réel que vous pourriez rencontrer tout en créant votre site Web de commerce électronique à l'aide de WooCommerce.
L'ajout d'un produit au CART ne prend programmatiquement qu'une ligne de code. Le seul brainstorming que vous ferez est de décider quand ou pourquoi vous voudrez le faire. Nous en parlerons davantage plus tard dans la troisième partie de cet article, lorsque nous travaillons sur notre scénario du monde réel.
Il suffit d'ajouter un produit au panier est le suivant:
<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>
Comme note de prudence, assurez-vous de ne pas exécuter ceci sur une action qui s'exécute sur chaque page, comme l'action Template_Redirect ou vous ajouterez l'un de ces produits au chariot à chaque page de page ou que vous rechargez. Évitez de faire cela chaque fois que possible:
<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>
J'ai vu cette question à poser un nombre infini de fois dans divers forums et sites Web avec très peu de réponses. J'espère que cela vous aidera la prochaine fois que vous voudrez retirer un produit du chariot et encore une fois, le seul brainstorming que vous ferez est quand ou pourquoi vous voudriez retirer un produit du chariot. Le code suivant empêchera quiconque de vérifier avec un produit de votre magasin. Je ne sais pas pourquoi vous voudriez faire quelque chose comme ça, mais cela montrera les étapes pour retirer le produit du panier qui n'est pas aussi simple que l'exemple précédent lorsque nous avons ajouté le produit au panier.
<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>
Pour mieux illustrer comment vider le chariot de manière programmatique, ajoutons un bouton au chariot qui permettrait aux clients de cliquer dessus et d'effacer leur panier.
Utilisons l'action wooCommerce_Proceed_To_Checkout et écho notre propre bouton «soumettre» qui effacera le panier pour le client actuel.
<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>
L'étape suivante consiste à écouter le bouton à cliquer de sorte que lorsqu'il est cliqué, nous effacons le panier. Pour cela, nous allons nous accrocher à l'action 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>
Vous remarquerez maintenant qu'après avoir appuyé sur le bouton, le Cart-Empty.php est affiché au lieu du modèle ordinaire.
Maintenant que nous avons établi comment ajouter ou supprimer un produit du chariot, même en vidant complètement le chariot, passons à la construction de notre scénario du monde réel où connaître ce type de truc fait une grande différence.
Dans notre scénario du monde réel, nous allons mettre tout cela au travail en construisant un système où vous pourriez donner un produit comme une incitation à tous vos clients. Eh bien, pas exactement pour tous vos clients, juste ceux qui se qualifient en fonction d'une exigence spécifique.
Nous devons être en mesure de donner un produit de votre choix comme une incitation à vos clients.
Créez un système qui vous permettra de donner votre produit incitatif en fonction de ce qui suit:
Avoir un produit spécifique dans le panier
ayant un montant total minimum pour votre commande
ayant un poids minimum dans votre panier
Avoir un produit d'une catégorie spécifique
parce que nous allons construire cela de la bonne façon, non seulement vous pourrez donner le produit pour le client se qualifiant à l'un de ces critères, mais vous serez également en mesure de les mélanger et de réduire vraiment qui obtient le produit et qui ne le fait pas.
non seulement vous pourrez offrir à vos clients le produit incitatif en vous qualifiant à l'un de ces critères, mais vous aurez le pouvoir de les combiner. Dans l'ordre, par exemple, vous pourrez tester une personne ayant au moins 100 $ au total dans son panier et un produit de la catégorie des «vêtements».
Voyons rapidement les fonctions que nous écrivons dans une minute et ce que chacun fait dans notre scénario de problème / solution.
get_id_from_product ($ product, $ check_variations = true) - obtient l'ID du produit et le renvoie. Prend en compte les ID de variation afin que nous les vérifiez avant de vérifier l'ID du produit réel.
Qualifies_Basedon_Specific_Product ($ product_required) - vérifie si un client est admissible ou non à l'incitation en ayant l'ID de produit spécifié comme l'un des éléments du panier.
Qualifies_Basedon_weight ($ weight_required) - vérifie si un client est admissible ou non à l'incitation en ayant un poids minimum dans le panier.
Qualifies_Basedon_Cart_Total ($ Total_required) - vérifie si le client est admissible ou non à l'incitation en ayant un montant total minimum avant que les taxes ne soient calculées.
Qualifies_BaseDon_product_category ($ catégorie) - vérifie si le client est admissible ou non à l'incitation en ayant un produit d'une certaine catégorie dans le panier.
add_incentive_to_cart ($ product_id) - ajoute le produit incitatif au panier si le client est qualifié pour cela
retire_incentive_from_cart ($ product_id) - supprime le produit incitatif au panier si le client n'a pas admis le produit.
Qualifies_for_incentive () - C'est là que la magie se produira car elle aura les règles qui doivent être égalées pour que le client se qualifie pour l'incitation. Cette fonction gérera la logique de notre programme d'incitation.
<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>
Comme vous pouvez le voir, ces fonctions renvoient «vrai» ou «faux», ce qui va nous rendre très facile pour nous de le mélanger et de créer un programme d'incitation qui est vraiment flexible. Ce qui reste à faire maintenant, c'est de trouver les règles que vous souhaitez définir pour que vos clients se qualifient pour le produit incitatif et rédiger la fonction Qualifies_For_Incentive () qui sera liée à l'action WOOCommerce_check_cart_items WooCommerce.
<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>
Voici quelques exemples de la façon dont vous pouvez utiliser ces fonctions pour créer quelque chose de vraiment unique.
Voici quelques exemples qui définissent une seule exigence.
<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>
Puisque nous avons une base de code très flexible, vous pouvez le mélanger et rendre votre programme incitatif unique. Voici quelques exemples supplémentaires montrant à quel point il est facile d'ajouter plus de conditions si nécessaire.
<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>
Vous pouvez même devenir plus avancé que cela et créer des scénarios plus complexes. La prochaine étape pour vous serait de transformer cela en une «classe» afin que vous puissiez avoir plus d'un programme d'incitation, chacun avec son propre ensemble unique de règles de qualification.
C'est tout pour cet article. Dans la troisième partie de cette série, nous travaillerons avec des actions et des filtres qui s'exécutent sur les nouveaux écrans de produit produit / modification. Nous allons ensuite explorer comment ajouter des champs personnalisés aux «écrans de produit» en utilisant rien d'autre que l'API.
Les actions et les filtres sont deux types de crochets dans wooCommerce. Les actions vous permettent d'ajouter ou de modifier les fonctionnalités, telles que l'ajout d'une nouvelle section à votre site Web ou la modification du processus de paiement. Les filtres, en revanche, vous permettent de modifier des données dans WooCommerce. Par exemple, vous pouvez utiliser un filtre pour modifier le prix d'un produit ou modifier le texte d'un bouton.
pour ajouter un Champ personnalisé dans le panier WooCommerce, vous pouvez utiliser le filtre 'WOOCOMMERCE_CART_ITEM_DATA'. Ce filtre vous permet d'ajouter des données personnalisées à l'élément de panier. Vous pouvez ensuite utiliser le filtre 'woocommerce_get_item_data' pour afficher ces données personnalisées dans le panier.
Le processus de départ dans WOOCommerce peut être modifié à l'aide de diverses actions et filtres. Par exemple, vous pouvez utiliser le filtre 'woocommerce_checkout_fields' pour modifier les champs de paiement, ou l'action 'woocommerce_checkout_process' pour ajouter une validation personnalisée au processus de paiement.
Pour modifier le texte d'un bouton dans WooCommerce, vous pouvez utiliser le filtre "woocommerce_order_button_text". Ce filtre vous permet de modifier le texte du bouton de commande sur la page de paiement.
Vous pouvez ajouter un message personnalisé au message personnalisé Page WooCommerce CART Utilisation de l'action 'wooCommerce_before_cart'. Cette action vous permet d'ajouter du contenu personnalisé avant le contenu du panier.
Oui, WooCommerce fournit plusieurs crochets qui vous permettent de modifier la page produit . Par exemple, vous pouvez utiliser l'action 'wooCommerce_before_single_product_summary' pour ajouter du contenu personnalisé avant le résumé du produit, ou la 'WooCommerce_After_Single_Product_Summary' pour ajouter le contenu personnalisé après le résumé du produit.
Pour modifier les détails de la commande dans WooCommerce, vous pouvez utiliser l'action 'wooCommerce_Order_Details_After_Order_Table'. Cette action vous permet d'ajouter du contenu personnalisé après le tableau de commande sur la page Détails de la commande.
Oui, vous pouvez utiliser le «WooCommerce_checkout_fields» Filtre pour ajouter des champs personnalisés à la page de paiement dans WooCommerce. Ce filtre vous permet de modifier les champs de paiement, notamment en ajoutant de nouveaux champs.
pour modifier le prix d'un produit dans WooCommercece , vous pouvez utiliser le filtre 'woocommerce_get_price_html'. Ce filtre vous permet de modifier le prix HTML, qui comprend le prix du produit.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!