[Résolu] CRÉATION SHORCODE AVEC INCLUDE PHP (Créer un compte)

  • WordPress :4.8.2
  • Statut : résolu
12 sujets de 1 à 12 (sur un total de 12)
  • Auteur
    Messages
  • #1929153
    leboncoin
    Participant
    Initié WordPress
    9 contributions

    Bonjour La Communauté WordPress,

    J’espère que vous avez passé un bon samedi ensoleillé.

    Je viens vers vous car après mille & 1 recherche internet je n’ai pas trouvé ma solution.

    Je souhaiterai créer un shortcode qui appel le contenu d’un fichier php.

    Je vous met ci-dessous un code, qui sera surement plus parlant q’un pavé

    function jesuisperdu() {

    return 'jesuisperdu.php';
    }

    add_shortcode('perdu', 'jesuisperdu');

    Un grand merci par avance

    #1929307
    Flobogo
    Modérateur
    Maître WordPress
    20857 contributions

    Bonjour,

    Sauf erreur de ma part (je ne suis pas développeuse), votre fonction appelle un fichier … mais pas son contenu. Ou alors c’est un problème de chemin du fichier …

    Ce serait peut-être mieux si vous mettiez le code exact.

    #1929602
    leboncoin
    Participant
    Initié WordPress
    9 contributions

    Bonjour,

    Un grand merci déjà pour votre réponse.

    C’est exactement ce que je souhaite faire, appellé un fichier qui contient du code php.

    Ci dessous le code plugin.php

    <?php
    /*
    Plugin Name: SMON PLUGIN
    Plugin URI: https://URLPLUGIN.FR
    Description: Création de shortcodes
    Version: 0.1
    Author: Mon plugin
    Author URI: https://monplugin.fr
    */

    function jesuisperdu() {

    return 'jesuisperdu.php';

    }

    add_shortcode('perdu', 'jesuisperdu');

    Ci dessous le code de jesuisperdu.php

    <?php global $current_user; if ( isset($current_user) ) {  echo $current_user->user_login;}?>

    Quand j’écris simplement du code php en direct dans une page tout fonctionne.

    Dans mon exemple le code est cours et simple, des fois il sera bien plus grand.

    Encore merci pour votre aide

     

    #1929923
    Flobogo
    Modérateur
    Maître WordPress
    20857 contributions

    Sans parler de création d’extension dédiée, est-ce que cette fonction « marche » si elle est placée dans functions.php de votre thème ?

    Si ça n’est pas le cas, c’est probablement parce qu’il faut appeler le fichier jesuisperdu.php, avec require_once … sinon, comment va t-il aller le chercher ?

    #1929994
    yrdna
    Participant
    Chevalier WordPress
    273 contributions

    Il vaut mieux opter pour la solution basé sur un modèle de page de WordPress en créant un modèle de page au lieu de passer par des Shortcodes pour exécuter du PHP sur une page.

    Plusieurs possibilités pour appeler un fichier PHP ou pour exécuter du PHP dans un modèle de page : 

     

    #1930583
    Flobogo
    Modérateur
    Maître WordPress
    20857 contributions

    Il vaut mieux opter pour la solution basé sur un modèle de page de WordPress en créant un modèle de page au lieu de passer par des Shortcodes pour exécuter du PHP sur une page.

    Ça dépend de ce qu’on met dans le shortcode (selon le résultat attendu), ça dépend si il inclut des paramètres ou pas, ça dépend si on doit le réutiliser sur d’autres pages/articles, etc …

    De nombreuses extensions comportent des fonctions qui sont destinées à être appelées par des shortcodes (galeries, cartes map, … pour ne citer que celles là)

    Via unHook (initialiser un hook add_action de la fonction dans le fichier functions.php et il suffit d’appeler le hook dans le modèle de page via un do_action)

    C’est exactement ce qu’on fait avec un shortcode  … mais directement dans la page  😉

    #1930613
    yrdna
    Participant
    Chevalier WordPress
    273 contributions

    Je souhaiterai créer un shortcode qui appel le contenu d’un fichier php

    Je me suis surtout focalisé sur la finalité de la demande (appel le contenu d’un fichier php), mais il est vrai que si @leboncoin à envie de créer un shortcode pour appeler le contenu d’un fichier PHP c’est son choix.


    @leboncoin
    avec ton shortcode [perdu][/perdu] tu peux appeler ton fichier php en changeant dans ta fonction

    return ‘jesuisperdu.php’;
    par
    get_template_part(‘jesuisperdu’);

     

    #1930676
    pifoux
    Participant
    Initié WordPress
    42 contributions

    Salut,

    Voila le code que j’utilise pour appeler un script php via un shortcode dans l’éditeur de texte:

    // include files via shortcode
    function include_file($atts) {
    extract(shortcode_atts(array(‘filepath’ => ‘NULL’), $atts));
    if ($filepath!=’NULL’ && file_exists(get_stylesheet_directory().$filepath)){
    ob_start();
    include(get_stylesheet_directory().$filepath);
    $content = ob_get_clean();
    return $content;
    }
    }

    add_shortcode(‘include’, ‘include_file’);

     

    et dans le texte, j’insère cela:

    [include filepath=’/xxxx.php’]

     

    #1931189
    leboncoin
    Participant
    Initié WordPress
    9 contributions

    Bonjour,

    Merci à vous, pifoux, yrdna etflobogo d’avoir pis le temps de me répondre.

    J’ai essayé toutes vos solutions sans succès.

    J’essai de trouver la solution de mon côté dans les plus bref délais afin de vous la partager.

    Encore merci à vous

    #1931543
    JeanSeb – Long Watch Studio
    Participant
    Initié WordPress
    32 contributions

    Bonjour leboncoin,

    Reprenons pas à pas ton exemple.

    Un shortcode va remplacer un « code » par du contenu.

    Ce contenu doit pouvoir s’afficher (je pense que c’est le but) ou s’exécuter en fond.

    Donc, ton exemple est le suivant :

    function jesuisperdu(){ 
    return'jesuisperdu.php';
    }
    add_shortcode('perdu','jesuisperdu');

    Ce qui implique que le shortcode voulu est [perdu] et on fait appel à la fonction ‘jesuisperdu’.

    Pour retourner un contenu d’un php, il faut l’encapsuler dans un include (comme l’a déjà dit yrdna)

    Si ton jesuisperdu.php ne contient que du texte, ta fonction doit donc s’écrire ainsi :

    return include(‘jesuisperdu.php’);

    par contre, si il y a une exécution de code avec des « echo » (par exemple), il est préférable d’encapsuler le include comme l’a indiqué pifoux.

    Ton code deviendra donc :

    ob_start();
    include('jesuisperdu.php');
    $content = ob_get_clean();
    return $content;

    ob_start() permet de capturer tout ce qui devrait normalement s’afficher à l’écran directement. ob_get_clean() permet de finir la capture, de vider le buffer mémoire et de retourner ce contenu dans $content.

    J’espère que ces quelques explications complémentaires te seront utiles.

    #1931778
    leboncoin
    Participant
    Initié WordPress
    9 contributions

    Bonsoir JeanSeb,

    Ta technique fonctionne à la perfection.

    Un grand merci à toi pour ton aide.

    Je vous met le code compilé ci-dessous.

    FICHIER 1, LE PLUGIN

    <?php

    /**
    * Plugin Name: JESUISPERDU
    **/


    function jesuisperdu(){ //Nom de la fonction
    ob_start();//permet de capturer tout ce qui devrait normalement s’afficher à l’écran directement
    include('jesuisperdu.php');//Appel le fichier php jesuisperdu placé à la racine du plugin
    $content = ob_get_clean();//ob_get_clean() permet de finir la capture, de vider le buffer mémoire et de retourner ce contenu dans $content.
    return $content;//Affiche le contenu
    }//Fin de la fonction
    add_shortcode('perdu','jesuisperdu'); //Création du shortocde [perdu]
    CODE PLUGIN

    Code fichier jesuisperdu.php

    <?php 
    global $current_user; if ( isset($current_user) ) { echo $current_user->user_login;}//Affiche le nom utilisateur
    echo'</br>';//Saut de ligne
    global $current_user; if ( isset($current_user) ) { echo $current_user->user_url;}//Affiche l'url de l'utilisateur
    CODE FICHIER JESUISPERDU.PHP

    Un grand merci à :

    1. JeanSeb LWS
    2. Pifoux
    3. yrdna
    4. flobogo

    Excellente soirée à tous

     

    #1931839
    JeanSeb – Long Watch Studio
    Participant
    Initié WordPress
    32 contributions

    Un dernier point dans ton code « jesuisperdu.php », pourquoi faire deux déclarations de $current_user ?

    Optimise le code en faisant :

    <?php
    global $current_user;
    if( isset($current_user) )
    {
    echo "{$current_user->user_login}<br/>{$current_user->user_url}";
    }

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