1
votes

Afficher un message personnalisé lorsqu'un produit ne peut pas être acheté dans les pages uniques de Woocommerce

Je crée un site Web qui est un magasin de fleurs. Certaines fleurs sont disponibles en saison. À l'aide du plug-in Advanced Custom Fields , j'ai ajouté un champ personnalisé dans la liste des types de publication de produit Woocommerce (case à cocher) mois pour choisir dans quel produit sera disponible.

J'ai pu désactiver le bouton Ajouter au panier pour les mois au cours desquels le produit ne sera pas disponible en utilisant le code ci-dessous:

add_filter('woocommerce_is_purchasable', 'is_available', 10, 2);
function is_available() {
    // this is a field added using 'Advance Custom Fields' plugin 
    $months = get_field('availability');
    $currentMonth = date('F');

    if(in_array($currentMonth, $months))
        return true;
    else
        return false;
}


0 commentaires

3 Réponses :


0
votes

Vous pouvez utiliser le is_purchasable dans votre modèle pour afficher un message

return in_array($currentMonth, $months)

Légère note latérale si vous ne vouliez renvoyer que vrai ou faux, vous auriez pu le faire p>

global $product;
if ( ! $product->is_purchasable()): ?>
  <p>Sorry Not Available</p>
<?php endif;

as in_array renvoie quand même une valeur booléenne


1 commentaires

Merci. Cela fonctionnerait, mais le problème est que je crée une page de produit via le générateur de page Elementor, donc je ne peux pas mettre ce code dans la page de modèle de produit. Y a-t-il un moyen de le faire via add_filter afin de supprimer l'ajout au panier et d'afficher le message à la place.



0
votes

Puisque vous disposez d'une méthode pour vérifier le mois de disponibilité du produit, vous pouvez écrire ce code en tant que fonction distincte dans votre functions.php . Pour que cette fonction puisse être appelée à partir du crochet pour supprimer le bouton Ajouter au panier et du crochet utilisé pour afficher le message.

function show_availibilty_message() {
  $availibilty_msg = get_product_availiblity();
  if(!$availibilty_msg){
    echo '<p>This product is not available for this month</p>';
  }
}
add_action( 'woocommerce_single_product_summary', 'show_availibilty_message', 20 );

Ainsi, votre fonction woocommerce_is_purchasable peut être modifiée comme

function is_available() {
  $availibilty = get_product_availiblity();
  return $availibilty;
}
add_filter('woocommerce_is_purchasable', 'is_available', 10, 2);

Et pour afficher le message, vous pouvez ajouter le crochet suivant

function get_product_availiblity(){
  $months = get_field('availability');
  $currentMonth = date('F');  
  if(in_array($currentMonth, $months))
    return true;
  else
    return false;
}


1 commentaires

Il masque le bouton Ajouter au panier et affiche le message si le mois n'est pas dans le tableau. Mais lorsque le mois est dans le tableau, il montre le bouton et lors de l'ajout au panier, il dit "Désolé, ce produit ne peut pas être acheté."



4
votes

Il y a des erreurs dans votre code, comme les 2 variables de fonction manquantes déclarées pour ce hook.

Le code revisité suivant inclut le message personnalisé affiché, lorsque le produit n'est pas disponible:

echo '<a class="button alt disabled">' . __("Currently unavailable.") . '</a>';

Le code va dans le fichier function.php de votre thème enfant actif (ou actif thème). Testé et fonctionne.

 entrez la description de l'image ici


Vous pouvez également afficher à la place un bouton désactivé avec un texte court, remplaçant dans mon code:

echo '<p style="color:#e00000;">' . __("This product is currently unavailable.") . '</p>';

Par ceci:

add_filter('woocommerce_is_purchasable', 'woocommerce_is_purchasable_filter_callback', 10, 2 );
function woocommerce_is_purchasable_filter_callback( $purchasable, $product ) {
    $months      = (array) get_field('availability');
    $purchasable = in_array( date('F'), $months ) ? $purchasable : false;

    return $purchasable;
}

add_action( 'woocommerce_single_product_summary', 'unavailable_product_display_message', 20 );
function unavailable_product_display_message() {
    global $product;

    if(! $product->is_purchasable() ){
        echo '<p style="color:#e00000;">' . __("This product is currently unavailable.") . '</p>';
    }
}

 entrez la description de l'image ici


7 commentaires

Il masque le bouton Ajouter au panier et affiche le message si le mois n'est pas dans le tableau. Mais lorsque le mois est dans le tableau, il montre le bouton et lors de l'ajout au panier, il dit "Désolé, ce produit ne peut pas être acheté."


terminé a supprimé les nouvelles questions et votre réponse précédente a été acceptée. Et mes excuses si cela a eu un impact négatif n'en était pas conscient. Le problème est donc qu'il affiche le message et supprime le bouton du panier si les mois ne sont pas dans le tableau, mais lorsque le mois est dans le tableau, il affiche le bouton du panier, mais lorsque je clique sur Ajouter au panier, il n'ajoute pas le produit dans dans le panier et indiquez l'erreur "Désolé, ce produit ne peut pas être acheté." Par exemple, septembre est dans la liste des mois où le produit est disponible, il affiche le bouton Ajouter au panier sur la page du produit, mais lorsque je l'ajoute, j'obtiens l'erreur.


@Muhammad Ma réponse ici était juste de répondre à votre question de code, montrant quelques erreurs et comme cela était basé sur un champ ACF personnalisé, ce n'était pas vraiment testable complètement. Je vais tester cela et découvrir comment résoudre le problème. Donnez-moi un peu de temps et je vous commenterai ici, quand il sera prêt et mis à jour.


@MuhammadTauseef J'ai testé cela sous la dernière version 3.7 de Woocommerce sur le thème de la vitrine et tout fonctionne parfaitement, lorsque le produit est disponible, cliquer sur le bouton Ajouter au panier ajoute le produit au panier et il n'y a pas de message disant que: "Vous ne pouvez pas acheter ceci produit "… ou quelque chose de similaire. Il y a donc autre chose qui pose problème: cela peut être une autre personnalisation faite par vous, le thème ou un plugin ...


J'ai installé le nouveau wordpress et installé uniquement woocommerce et le champ personnalisé avancé et utilisé le thème de la vitrine de la même manière que vous, mais j'obtiens cette erreur. Il n'y a pas de script supplémentaire ajouté be me et il n'y a pas d'autre plugin activé à l'exception de ces deux.


Cela vous dérange si je pose mon autre question concernant le fait de ne pas ajouter le produit dans le panier dans différentes questions afin que quelqu'un d'autre puisse y répondre à ma place. Je sais que vous avez répondu à ce qui a été demandé la première fois concernant l'affichage d'un message qui fonctionne mais le nouveau problème est différent, vous avez dit que vous aviez vérifié avec le thème stronfront et woocommerce 3.7 et que vous n'obteniez pas cette erreur, j'ai fait la même chose mais J'obtiens toujours l'erreur.


@MuhammadTauseef Comme dit, pour moi cela fonctionne très bien sur la dernière version 3.7 de WooCommerce … Bien sûr, vous pouvez poser une nouvelle question si vous le souhaitez, mais utilisez un titre différent avec quelque chose comme "" problème sur Woocommerce 3.7 " par exemple en ajoutant cette réponse comme lien dans votre question. Si quelqu'un peut vous aider, pas de problème pour moi.