[Résolu] appeler contenu d’une function dans une autre function (Créer un compte)

  • WordPress :5.8
  • Statut : résolu
8 sujets de 1 à 8 (sur un total de 8)
  • Auteur
    Messages
  • #2424930
    lahrim
    Participant
    Chevalier WordPress
    103 contributions

    Bonjour,

    J’ai une question php, pas trouvé de réponses malheureusement.

    Voici un exemple :

    function code1($id, $title){
    global $help;

    $help = ['id' => $id, 'title' => $title];

    echo '<div style="width:400px; margin:auto"><pre>';
    print_r($help);
    echo '</pre></div>';
    }

    code1('mon id 1', 'mon title 1');
    code1('mon id 2', 'mon title 2');
    code1('mon id 3', 'mon title 3');

    function code2(){
    global $help;
    extract($help);

    echo '<div style="width:400px; margin:auto"><pre>';
    print_r($help);
    echo '</pre></div>';
    }

    le print_r($help) de la function code1 affiche :

    Array
    (
    [id] => mon id 1
    [title] => mon title 1
    )
    Array
    (
    [id] => mon id 2
    [title] => mon title 2
    )
    Array
    (
    [id] => mon id 3
    [title] => mon title 3
    )

    Or le print_r($help) de la function code2 affiche uniquement le dernier :

    Array
    (
    [id] => mon id 3
    [title] => mon title 3
    )

    Est-il possible d’avoir comme dans la première function les informations ?

    Merci de la réponse (si cela est possible) 🙂

    • Ce sujet a été modifié le il y a 1 année et 10 mois par lahrim.
    #2424940
    Lumiere de Lune
    Participant
    Maître WordPress
    20531 contributions

    C’est l’ordre de déclaration de tes variables, qui sont écrasées à chaque ligne…

     

    $help = array(
    1 => array (
    'id' => 'blabla',
    'title' => 'blabla'),
    2 => array (
    'id' => 'blabla',
    'title' => 'blabla'),
    3 => array (
    'id' => 'blabla',
    'title' => 'blabla')
    );

    function code1 ( ) {
    global $help ;

    /* reste de la fonction */
    }

    function code2 ( ) {
    global $help ;

    /* reste de la fonction */
    }

     

    marcherait beaucoup mieux.

    Tu peux aussi faire encore plus simple pour $help :

    $help = array(
    'id1' => 'title1',
    'id2' => 'title2',
    'id3' => 'title3'
    );

     

    #2425045
    lahrim
    Participant
    Chevalier WordPress
    103 contributions

    Merci @Lumiere-de-lune,

    malheureusement cela ne fonctionne pas, le mieux le contenu du plugin que je souhaite réaliser :

     

    il y a le ficher show-php.php qui contient :

    add_filter('update_footer', function(){
    return 'Version wordpress ' . get_bloginfo('version') . ' | Version php ' . phpversion();
    }, 9999);

    helpers('showPhp', 'Version php');

    function showPhp_help_inutile(){
    echo '<div class="wrapHelpInutile">';
    echo '<h2>Version php</h2>';

    echo '<div class="wrapContent">';
    echo '<p>Afficher la version php utilisé</p>';

    echo '<p>En bas de page dans l\'admin à coté de la version wordpress</p>';
    echo '</div>';
    echo '</div>';
    }

    un fichier disable-brp.php qui contient :

    remove_filter('the_content', 'wpautop');
    remove_filter('the_excerpt', 'wpautop');

    helpers('disableBrP', 'Balises p et br');

    function disableBRP_help_inutile(){
    echo '<div class="wrapHelpInutile">';
    echo '<h2>Désactiver l\'ajout automatique des balises p et br</h2>';

    echo '<div class="wrapContent">';
    echo '<p>L’editeur HTML de WordPress est paramétré par défaut d\'ajouter les balises p et br en mode affichage du code HTML.</p>';

    echo '<p>Cela peut poser des problèmes, par exemple si on veut faire des retouches manuelles du code, faire des copier-coller de code HTML ou si on préfère avoir quelque part un saut de paragraphe plutôt qu’un simple retour à la ligne.</p>';

    echo '<p>Il est possible d’y remédier en activent l\'option</p>';
    echo '</div>';

    echo '<div class="infos">';
    echo '<h3>Info utile</h3>';

    echo '<p>Si vous utilisé le plugin TinyMCE, il n\'est pas utile d\'activer l\'option</p>';
    echo '</div>';
    echo '</div>';
    }

    il y à encore environ 10 fichiers avec des options d’ergonomie de wordpress

     

    Puis un fichier helpers.php qui affiche l’onglet aide en haut de l’onglet, qui contient :

    function helpers($id, $title){
    global $helpers;

    $helpers = ['id' => $id, 'title' => $title];

    echo '<div style="width:400px; margin:auto"><pre>';
    // print_r($helpers);
    echo '</pre></div>';
    }

    add_filter('contextual_help', function($help, $screen_id, $screen){
    global $helpOption, $namePlugin, $helpers;
    extract($helpers);

    echo '<div style="width:400px; margin:auto"><pre>';
    print_r($helpers);
    echo '</pre></div>';

    if($screen_id == $helpOption):
    $callback = $id . '_help_' . $namePlugin;

    $screen->add_help_tab(array('id' => $id, 'title' => $title, 'callback' => $callback));
    endif;
    }, 10, 3);

     

    Puis le fichier index.php qui inclus les fichiers :

    include_once('admin/helpers.php');
    include_once('admin/settings.php'); // les fichiers d'options comme show-php.php en include_once

    L’objectif est quand le fichier helpers.php la ligne ;

    $screen->add_help_tab(array('id' => $id, 'title' => $title, 'callback' => $callback));

    ce multiplie par le nombre de fois qu’il y aura de

    helpers('id', 'title'); 

     

    Cela est-il possible ou maladroit de ma part ?!

    #2425050
    Lumiere de Lune
    Participant
    Maître WordPress
    20531 contributions

    Donc faites une $helpers une array et un petit foreach

    #2425055
    lahrim
    Participant
    Chevalier WordPress
    103 contributions

    La un peu dans le brouillard :/

    #2425071
    mathieu42
    Participant
    Maître WordPress
    2013 contributions

    avez-vous activé WP_DEBUG ? quand c’est activé, on voit un message d’erreur disant que l’utilisation de l’action « contextual_help » est obsolète.

    à la place vous devez utiliser un crochet lancé dans la page où vous voulez rajouter les panneaux d’aide et vous faites par exemple cela :

    add_action("......", function () {

    $panneaux = apply_filters("MonExtension/ajout_panneau_aide", []);


    foreach ($panneaux as $identifiant => $panneau) {

    get_current_screen()->add_help_tab([
    "id" => $identifiant,
    "title" => $panneau["titre"],
    "callback" => function () use ($panneau) {
    ?>
    <div style="width : 400px; margin : auto;">
    <pre>
    <?php $panneau["contenu"]();?>
    </pre>
    </div>
    <?php
    },
    ]);

    }


    });

    et ensuite dans chaque fichier, vous définissez le contenu des panneaux comme cela :


    add_filter("MonExtension/ajout_panneau_aide", function ($liste_panneaux) {

    $liste_panneaux["MonExtension__id_onglet_aide_balises_p_br"] = [
    "titre" => "Balises p et br",
    "contenu" => function () {

    echo '<div class="wrapHelpInutile">';
    echo '<h2>Désactiver l\'ajout automatique des balises p et br</h2>';

    echo '<div class="wrapContent">';
    echo '<p>L’editeur HTML de WordPress est paramétré par défaut d\'ajouter les balises p et br en mode affichage du code HTML.</p>';

    echo '<p>Cela peut poser des problèmes, par exemple si on veut faire des retouches manuelles du code, faire des copier-coller de code HTML ou si on préfère avoir quelque part un saut de paragraphe plutôt qu’un simple retour à la ligne.</p>';

    echo '<p>Il est possible d’y remédier en activent l\'option</p>';
    echo '</div>';

    echo '<div class="infos">';
    echo '<h3>Info utile</h3>';

    echo '<p>Si vous utilisé le plugin TinyMCE, il n\'est pas utile d\'activer l\'option</p>';
    echo '</div>';
    echo '</div>';

    },
    ];

    return $liste_panneaux;

    });

    #2425086
    lahrim
    Participant
    Chevalier WordPress
    103 contributions

    Merci @Mathieu42 pas du tout pensé au wp_debug (il y a même d’autres erreurs visibles grâce au wp_debug).

    #2425096
    lahrim
    Participant
    Chevalier WordPress
    103 contributions

    Cela fonctionne 🙂

    J’ai aussi simplement mis dans chaque fichier qui a besoin d’ajouter du texte dans l’onglet aide le code suivant :

     

    function showPhp_help_inutile(){
    echo '<div class="wrapHelpInutile">';
    echo '<h2>Version php</h2>';

    echo '<div class="wrapContent">';
    echo '<p>Afficher la version php utilisé</p>';

    echo '<p>En bas de page dans l\'admin à coté de la version wordpress</p>';
    echo '</div>';
    echo '</div>';
    }

    add_action('admin_head', function(){
    get_current_screen()->add_help_tab([
    'id' => 'showPhp',
    'title' => 'Version php',
    'callback' => 'showPhp_help_inutile'
    ]);
    });

    Merci pour l’aides apporté 🙂

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