Support

Account

Home Forums Front-end Issues Woocommerce using acf into templates (categories terms)

Woocommerce using acf into templates (categories terms)

  • Hey guys,

    (This is a made by a french guy who would like to help this community soo please, don’t judge my english :))

    Recently, i spend about 20 hours try debugging something between ACF fields and Woocommerce.

    The problem : Displaying into front-end custom fields from ACF assigned to Woocommerce categories.

    1 : Create fields, assign them to taxonomy/categories. Everything’s ok. I can see my fields into my categories.

    2. Try to output them like i always do, with the_field(‘slug of my field’). Doesn’t work. Tried with with the_field(‘slug of my field’, ’45’), doesn’t work. Here 45 is my term ID as you can see when you modify a category into woocommerce

    3. Wait, search, try, headhache, despair, search again, always try something else, go to woocommerce forum, stackexchange, ACF forum, damn finally found something like i needed here : Solved Array WP_Error trying to get ACF taxonomy value.

    4. Damn, it is not really the same thing but it’s close. Got errors with : get_the_terms($post->ID, “product_brand”); because it is not an array? Why? Probably because $post->ID was the ID of the product but, i am into a category, so it’s not the good ID first.

    5. With a few try i found something. At my secondary option of get_field i passed ‘product_cat_MYID’. Well, this is my first excitement from 16-18 hours of work. I had already tried term_MYID, tag_MYID, MYID, category_MYID … but now, i have the right one!!!

    6. So now, there’s another problem. ACF slugs are not working.. hum! Then i digg into DB and found name of fields in this format ‘field_51fbcded50aac’. HOURRAY! This with my product_cat_MYID work!!! Ho wow, how close i am of the finish line.

    7. I’m in a template, more precisely ‘archive-product.php’ template into my Woocommerce. I need to get my category slug AND category ID, i need it because i know my client will create new categories and my code need to be bulletproof. The only way i found to achieve this is not really beautiful, not bulletproof, disappointing and not clean but, it work. Then, if you take a look at your <body> classes, you can see “term-categoryNAME” and “term-categoryID”. Aight, i will use a code like this :

    foreach(get_body_class() as $term){
    		if(preg_match('/term-[0-9]/', $term)){
    			$exploded = explode('term-', $term);
    			$id = $exploded[1];
    		}		
    	}

    This do the trick, you get what you need.

    WELL DONE! Look at my attachment i’ve post a mix of screenshot telling my story.

    Hope it could help someone else.

  • Hi @ayottepl

    Thanks you very much for sharing this with us!

    I wonder if you read over this guide:
    http://www.advancedcustomfields.com/resources/how-to/how-to-get-values-from-a-taxonomy-term/

    On that page, there is code to find the current term ID / taxonomy, etc

    This would help clean up your body_class code!

  • Bonjour Ayottepl,
    Je constate que tu es français donc j’en profite pour te poser une question puisque j’ai un problème presque similaire : je suis en train de faire ma boutique sur Woocommerce et dans mon cas je voudrais ajouter une seconde description de catégorie tout en bas de mes pages de catégorie.
    J’ai donc paramétré un champ Wysiwyg et créé la règle suivante :
    Term est égal à Catégories
    Dans mon template archive-product.php, j’ai ajouté le code suivant : <?php the_field(‘description_categorie_2’); ?>

    L’éditeur Wysiwyg s’affiche parfaitement dans l’admin, je peux éditer mon texte et l’enregistrer sans problème, mais côté front-office rien se passe ! J’avoue que je suis débutante en php et je n’y connais pas grand chose (donc j’ai eu un peu de mal à comprendre comment tu as résolu ton problème :D). Si jamais tu as une idée pour mon problème je t’en serais grandement reconnaissante parce que comme toi je m’arrache les cheveux depuis des jours et des jours….

    Bonne journée,
    Elsa

  • Bonjour elsappy,

    Pour être capable d’afficher ça dans la page archives, tu dois avoir le ID du terme utilisé pour cette archive.

    Pour ma part j’ai utilisé une fonction php afin de sortir le ID qui apparait dans une des classes du body… c’est pas très propre mais à ce moment là au moins ça fonctionnait 😉

    Tu peux commencer en essayant avec un ID hardcodé peut-être?

    <?php the_field(‘description_categorie_2′, ‘ product_cat_19′); ?> admettons. Je mets 19 à titre d’exemple mais tu vas retrouver cette classe sur ton champ body avec le bon id de page à la place. Par contre, sur ton champ body, le id va être relié à “term-” mais tu te dois d’utiliser product_cat_ pour les champs acf!

    Ensuite, pour le faire dynamique, Elliot a publié un lien utile qui pourrait fonctionner (je ne l’ai pas testé) : http://www.advancedcustomfields.com/resources/how-to/how-to-get-values-from-a-taxonomy-term/

    En utilisant ce code suivant :

    <?php
     
    global $post;
     
    // load all 'category' terms for the post
    $terms = get_the_terms($post->ID, 'category');
     
    // we will use the first term to load ACF data from
    if( !empty($terms) )
    {
    	$term = array_pop($terms);
     
    	$custom_field = get_field('category_image', 'category_' . $term->term_id );
    
    //ici je remplacerais get_field('category_image', 'category_' . $term->term_id
    
    //par get_field('description_categorie_2', 'product_cat_' . $term->term_id
     
    	// do something with $custom_field
    }
     
    ?>

    Tu pourrais obtenir le ID de catégorie que tu as besoin.

    En gros, tu as obligatoirement besoin du 2e paramêtre dans ton “the_field” qui se trouve à pointer la bonne catégorie 🙂

    Bonne chance! N’hésite pas si ça ne fonctionne pas, il y a toujours moyen de s’entraider 😉

  • Merci infiniment pour ta réponse !

    Premier test plutôt concluant je tiens quelque chose grâce à toi : j’ai inséré l’id de l’une des mes catégories (par exemple ma catégorie s’appelle “caramel” dont l’id est 27), jusqu’ici tout va bien, le texte s’affiche.
    Mais voila, j’ai 30 autres (sous-)catégories à éditer et en utilisant le code que tu m’a donné avec l’id de cette catégorie et en paramètrant dans ACF “Taxonomie = Caramel”, ce même texte s’affiche sur toutes les catégories confondues 🙂

    Alors pour en revenir à tes explications, tu dis : “Ensuite, pour le faire dynamique, Elliot a publié un lien utile qui pourrait fonctionner (je ne l’ai pas testé)” : comme je suis assez nulle, pourrais-tu juste me dire ce que tu entends par dynamique ? Et le code que tu m’as donné tu le placerais dans le fichier archive-product aussi ? *

    Je vais me creuser la tête maintenant mais c’est vraiment pas évident ^^ Merci encore, enfin un résultat un peu positif !

    * En fait je pense que dynamique veut dire que l’id changera en fonction de la page de catégorie c’est ça ? Pour le code, je l’ai copié dans archive-product, remplacé ce qu’il fallait comme tu m’as dis, mais ca ne marche pas. Alors j’ai une question un peu bête mais le $post qui est écrit au tout début ça ne fait pas référence aux articles ça ?

  • Crap.. j’avais tout écris et en voulant ajouter un link ça fermé l’onglet.. ok je recommence mais je vais faire un peu plus court!

    Bonne déduction, dynamique étant le ID selon la catégorie dans laquelle tu te trouves.

    De plus, je crois que comme tu dis, le $post ne s’applique pas dans Woocommerce.

    Tu peux donc utiliser le code que j’ai créé pour aller chercher le ID dans la classe de l’élément <body>

    <?php 
    //Get product_cat id	
    	foreach(get_body_class() as $term){
    		if(preg_match('/term-[0-9]/', $term)){
    			$exploded = explode('term-', $term);
    			$id = $exploded[1];
    		}		
    	}
    ?>

    Ensuite, tu dois créer une variable pour aller chercher ton champ ACF pour chaque catégorie spécifiquement :

    <?php
        $banner = get_field('field_51fbcc4b53e5f', 'product_cat_'.$id);	
    ?>

    Comment aller chercher ce ID (field_51fbcc4b53e5f)?

    Vas dans l’admin, sous Custom fields, et trouve ton champ ACF. Ensuite, clique droit et inspect l’élément. Voici une capture d’écran du ID de mon champ ACF en exemple plus haut :

    http://cl.ly/image/1U1V432w0n46

    Pas très compliqué à trouver 😉

    Donc par la suite tu n’auras aucune difficulté à utiliser ta variable (ici en exemple $banner) comme suit :

    <?php echo $banner ?>

    Voilà!

    J’espère que ça va fonctionner 🙂

    Bonne chance!

  • Wow tu es un génie ma parole ! Ca fonctionne enfin… C’est peut être une méthode un peu bricolée mais bon ça marche c’est l’essentiel !
    MERCI 1000 fois je vais enfin pouvoir avancer 🙂 🙂

    Bonne journée et bon week-end !

  • Ça fait plaisir!

    Bonne continuité et bon WE @elsappy 🙂


    @elliot
    i think Woocommerce does not use $post for products on archive-products.php.

    Have you any idea what i can use instead of $post? I’ll try to look further more to solve my body class trick for next use of this.

  • Hi @ayottepl

    Sorry I can’t be of much help, I don’t read or speak french, although I wish I did.

    The $post issue can be solved by looking on woocomerce’s documentation to find a function which finds the current product ID.

    Knowing the ID will fix the issue, because you can use the ID as a second parameter to the get_field function!

    Thanks
    E

  • Hi @elliot,

    My issue was that I wanted to add a second description field in my category pages on Woocommerce (with a Wysiwyg editor). The field was correctly displayed in the back-office, however in the front-office it didn’t work with the following code : <?php the_field(‘description_categorie_2’); ?>

    And your code in the section “Finding the term related to the current post” (here http://www.advancedcustomfields.com/resources/how-to/how-to-get-values-from-a-taxonomy-term/) didn’t work either.
    But ayottepl gave me a clever tip to resolve it

    Have a great day !

  • Hi @ayottepl

    Your code is incorrect.
    Please read over the docs and make sure to use the field_name and post_id parameters correctly.

    Thanks
    E

Viewing 11 posts - 1 through 11 (of 11 total)

The topic ‘Woocommerce using acf into templates (categories terms)’ is closed to new replies.