web-dev-qa-db-fra.com

PHP code à l'intérieur des shortcodes

En gros, j'ai cette ligne de code:

<?php echo do_shortcode('[O_U user_name="operator" 
blocked_message="This page is restricted for guests."] 
**Content Goes here** [/O_U]'); ?>

Maintenant, dans Content Goes here, j'utilise du HTML classique pour créer mon contenu. Mais, maintenant, j'ai besoin d'ajouter un peu de php dans ce code HTML.

Pour le moment, je dois renseigner le option pour select tag avec les résultats MySQL.

J'ai un code php:

<?php
        $database_name = "rams";
        $mydb = new wpdb(DB_USER, DB_PASSWORD, $database_name, DB_Host);
        $mydb -> show_errors();

        //Populate languages
        $languages = $mydb -> get_results(
            'SELECT * FROM language_skills'
        );

        foreach ($languages as $language){
           //do some echo of html
        }
?>

Comment puis-je obtenir un résultat ici? J'ai maintenant, l'écho attend une chaîne là-bas. J'ai pensé à heredoc et à une fonction personnalisée, mais je n'arrive pas à obtenir le résultat.

METTRE À JOUR:

J'ai réussi à obtenir mes données. C'est dans un tableau. Comment puis-je afficher tous les résultats du tableau dans la situation ci-dessus?

Mon tableau va quelque chose comme ça:

<option value="$value">$content</option>

Cela montre exactement ce que je veux quand j'utilise:

[shortcode].$array[index].[/shortcode]

Comment puis-je ajouter tous les index? J'ai essayé pour chacun mais ça ne marche pas entre les shortcodes

RÉPONSE:

J'ai utilisé implode pour changer le tableau en chaîne et le code fonctionne maintenant comme je le souhaite.

1
theo

Vous ne pouvez pas mettre les fonctions PHP dans votre shortcode.

Cependant, vous n'en avez pas besoin. Vous pouvez simplement utiliser votre boucle foreach- pour créer le code HTML et le stocker dans une variable, par exemple $shortcodehtml.

Donc, après, vous pouvez appeler

echo do_shortcode('[O_U user_name="operator" blocked_message="This page is restricted for guests."]' . $shortcodehtml . '[/O_U]');

La meilleure version serait que si vous créiez la sortie dans la fonction shortcode - de mon point de vue, il n'est pas nécessaire de passer tout le code html au shortcode - mais cela devrait fonctionner correctement.

1
fischi

Il est toujours préférable d'utiliser les éléments PHP dans la définition de votre fonction et non lors de l'exécution de votre shortcode.

Pour ajouter plus à la réponse de Fischi, vous pouvez vous référer à l'extrait ci-dessous.

function wptuts_first_shortcode($atts, $content=null){

    $return_variable = "";
    $database_name = "rams";
    $mydb = new wpdb(DB_USER, DB_PASSWORD, $database_name, DB_Host);
    $mydb -> show_errors();

    //Populate languages
    $languages = $mydb -> get_results(
        'SELECT * FROM language_skills'
    );

    foreach ($languages as $language){
       $return_variable = $return_variable."<br />".$language;
    }
    return $return_variable;
  }

add_shortcode($return_variable, 'wptuts_first_shortcode');

Vous pouvez utiliser la valeur renvoyée dans votre affichage de shortcode.

Reportez-vous à link pour une référence supplémentaire.

1
Rohit Pande