Créer un plugin qui charge un js si un champs ACF wysiwyg contient une classe (Créer un compte)

  • WordPress :6.2
  • Statut : non résolu
5 sujets de 1 à 5 (sur un total de 5)
  • Auteur
    Messages
  • #2457997
    FrancoisR
    Participant
    Initié WordPress
    10 contributions

    Bonjour,

    Ma configuration WP actuelle

    • Version de PHP/MySQL : 7.4.x
    • Thème utilisé : Thème custom
    • Extensions en place : Extension custom
    • Nom de l’hébergeur : Gandi
    • Adresse du site : https://www.tourdumondiste.com

    J’essai de créer un plugin custom qui permet de charger un js et une feuille de style seulement dans le cas où se trouve dans mon post un élément html ayant la classe .test. Mon thème est codé de telle façon que les rédacteurs du site ont à leur disposition de nombreux champs wysiwyg dans la page d’édition de l’article. C’est dans l’un ou l’autre de ces champs acf wysiwyg qu’ils vont éventuellement ajouter un élément ayant la classe test.

    J’ai déjà essayé plein de choses qui ne fonctionnent pas comme ceci en dernier lieu :

     

    <?php
    /*
    Plugin Name: Custom Comparative Div Tables
    Plugin URI: https://www.tourdumondiste.com
    Description: Mon plugin pour faire des tableaux
    Version: 8
    Author: François Rosenbaum
    Author URI: https://www.tourdumondiste.com
    License: GPL2
    */

    function custom_comparative_div_tables_load_script() {
    if (is_singular()) { // Vérifie si c'est un article
    global $post;

    $content = $post->post_content;

    // Vérifie si ACF est activé et si la fonction get_fields() est disponible
    if (function_exists('get_fields')) {
    // Récupérer les champs ACF pour l'article en cours
    $fields = get_fields($post->ID);

    // Concaténer les valeurs des champs ACF avec le contenu principal
    $acf_content = '';
    foreach ($fields as $field) {
    if (is_array($field)) {
    $acf_content .= implode(' ', $field);
    } else {
    $acf_content .= $field;
    }
    }

    // Combiner le contenu principal et les champs ACF
    $combined_content = $content . $acf_content;

    // Rechercher la présence de l'élément avec la classe 'test'
    $has_test_element = strpos($combined_content, 'test') !== false;

    if ($has_test_element) {
    // Charger les fichiers JavaScript et CSS nécessaires
    wp_enqueue_script('custom-comparative-div-tables', plugin_dir_url(__FILE__) . 'js/custom-comparative-div-tables.min.js', array('jquery'), '9', false);
    wp_enqueue_script('custom-comparative-div-tables-syncscroll', plugin_dir_url(__FILE__) . 'js/syncscroll.js', array(), '9', false);
    wp_enqueue_style('custom-comparative-div-tables-css', plugin_dir_url(__FILE__) . 'css/custom-comparative-div-tables.min.css', array(), '9', false);
    }
    }
    }
    }

    add_action('wp_enqueue_scripts', 'custom_comparative_div_tables_load_script');

    Voilà a structure des mes champs ACF :

    • Contenu : le groupe de champs à la racine de mon plugin ACF
      • nom du champ : flexible : type flexible content
        • nom du champ : chapitre : Layout
          • nom du champ : paragraphes : type flexible content
            • une_colonne : layout
              • nom du champ : colonne_1 : type wysisyg editor
            • deux_colonnes : layout
              • nom du champ : colonne_1 : type wysisyg editor
              • nom du champ : colonne_2 : type wysisyg editor

    Les champs ACF wysiwyg que vont remplir les rédacteurs sur la page d’édition des articles (custom post type) s’appellent colonne_1 ou colonne_2. Il peut y avoir un nombre différent de ces champs sur la page d’édition selon l’article. En effet, le rédacteur peut ajouter un champ avec un bouton +.
    Je n’utilise pas Guttenberg, mais encore l’ancien éditeur classique de WordPress.

    J’anticipe en vous disant que je suis bien sûr des noms de mes fichiers, de leurs URLs, etc. Mon problème n’est probablement pas une bête erreur de code de ce type.

    Si jamais un expert sait comment je peux faire ça ou si c’est tout simplement impossible ce serait génial. je serais hyper reconnaissant. J’ai plein d’applications possible pour mon site, si jamais je pouvais faire ça.

    À bientôt j’espère,

     

    • Ce sujet a été modifié le il y a 1 année et 6 mois par FrancoisR.
    • Ce sujet a été modifié le il y a 1 année et 6 mois par FrancoisR.
    • Ce sujet a été modifié le il y a 1 année et 6 mois par FrancoisR.
    • Ce sujet a été modifié le il y a 1 année et 6 mois par FrancoisR.
    #2458082
    mathieu42
    Participant
    Maître WordPress
    2027 contributions

    je pense que c’est possible de faire cela.

    en ce qui concerne votre code, vous devez le débuguer donc commencez par exemple par afficher le contenu des variables pour voir si elles contiennent les données souhaitées.

     

    #2458096
    FrancoisR
    Participant
    Initié WordPress
    10 contributions

    Salut Mathieu,

    Merci. Je ne sais pas afficher le contenu des variables. Je pense que je peux trouver comment faire avec un peu de recherches je crois, mais si tu peux me m’expliquer ça facilement je suis preneur. Et puis, je ne sais pas non plus comment faire pour afficher le contenu des variables sans que mes visiteurs ne voit s’afficher ça sur la page. J’imagine qu’il ya un équivalent de console log en php, pour voir ça dans la console du navigateur ? Je code sur le site en prod. Je sais que c’est pas terrible, mais bon…

     

    • Cette réponse a été modifiée le il y a 1 année et 6 mois par FrancoisR.
    #2458114
    mathieu42
    Participant
    Maître WordPress
    2027 contributions

    en effet ce n’est pas pratique de travailler sur le site en production directement.

    je vous conseille de dupliquer votre site, cela vous permettra d’activer le mode débugage sur le site de travail pour voir d’éventuelles erreurs php :

    Débogage de WordPress

     

    #2458115
    FrancoisR
    Participant
    Initié WordPress
    10 contributions

    Oui c’est justement ce que je voulais éviter. Ça prend du temps.

5 sujets de 1 à 5 (sur un total de 5)
  • Vous devez être connecté pour répondre à ce sujet.