Maison >Tutoriel CMS >WordPresse >Actions et filtres WooCommerce pour manipuler le chariot

Actions et filtres WooCommerce pour manipuler le chariot

William Shakespeare
William Shakespeareoriginal
2025-02-18 10:18:09346parcourir

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.

Les plats clés

  • L'article fournit des instructions détaillées sur la façon de manipuler le panier WooCommerce à l'aide d'actions et de filtres, notamment en ajoutant et en supprimant les produits, en vidant le panier et en mettant en place un système de produit incitatif.
  • L'ajout d'un produit au panier ne nécessite qu'une seule ligne de code, mais il est crucial de ne pas exécuter cela sur une action qui s'exécute sur chaque page, comme l'action template_redirect.
  • La suppression d'un produit du CART par programme est plus complexe que d'en ajouter une. Le code a fourni des cycles via chaque produit dans le panier et supprime le produit spécifié.
  • L'article montre comment créer un bouton qui vide le panier par programme, en utilisant l'action woocommerce_proceed_to_checkout.
  • L'article fournit un scénario réel de construire un système de produits incitatifs, où un produit est donné aux clients qui répondent aux exigences spécifiques, telles que le montant total minimum pour une commande ou un produit d'une catégorie spécifique.

Ajouter un produit au panier programmatiquement

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>

Retirer un produit du CART programatiquement

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>

Vider le panier programmatiquement

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.

Actions et filtres WooCommerce pour manipuler le chariot

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.

Actions et filtres WooCommerce pour manipuler le chariot

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.

Produits d'incitation

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.

le problème

Nous devons être en mesure de donner un produit de votre choix comme une incitation à vos clients.

La solution

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.

Une seule exigence

Voici quelques exemples qui définissent une seule exigence.

produit spécifique existant dans le panier
<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>
Poids minimum de tous les produits du chariot
<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>
Total du panier Exclusion des taxes
<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>
Produit d'une catégorie dans le panier
<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>

le mélanger

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.

Produit d'une catégorie dans le chariot ou un total minimum Total
<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>
Produit d'une catégorie et de chariot minimum total
<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.

Questions fréquemment posées (FAQ) sur les actions et filtres WooCommerce

Quelle est la différence entre les actions et les filtres WooCommerce?

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.

Comment puis-je ajouter un champ personnalisé au panier WooCommerce?

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.

Comment puis-je modifier le processus de paiement WooCommerce?

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.

Oui, WooCommerce fournit plusieurs crochets qui vous permettent de modifier les e-mails envoyés par WooCommerce. Par exemple, vous pouvez utiliser les actions «WooCommerce_Email_Header» et «WooCommerce_Email_Footer» pour modifier l'en-tête et le pied de page des e-mails, ou les «WooCommerce_email_Order_Details» pour modifier les détails de la commande inclus dans les e-mails.

Comment puis-je modifier le texte d'un bouton dans WooCommerce?

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.

Comment puis-je ajouter un message personnalisé à la page WooCommerce CART?

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.

Puis-je utiliser des crochets pour modifier la page de produit WooCommerce?

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.

Comment puis-je modifier l'ordre WOOCommerce?

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.

Puis-je utiliser des crochets pour ajouter des champs personnalisés à la page de paiement WooCommerce?

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.

Comment puis-je modifier le prix d'un produit dans WooCommerce à l'aide de crochets?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn