web-dev-qa-db-fra.com

Ajout de code PHP/HTML dans la page à partir d'un modèle personnalisé

J'aide mon fils avec son site financier avec une programmation personnalisée. Le premier projet pour lui est une feuille de calcul personnalisée utilisant jQuery, flot, php, etc.

J'ai créé un thème enfant, créé un modèle, un fichier functions.php, une feuille de style, etc., ce qui fonctionne bien - tant que la feuille de calcul est à la fin de la page. Mais maintenant, j'essaie de l'améliorer en lui ajoutant la possibilité d'ajouter du texte avant et après la feuille de calcul.

Ma première idée était que je pourrais peut-être simplement utiliser un shortcode, mais je ne sais pas si c'est la bonne façon. Il semble que les codes courts ne soient pas destinés à la sortie de grandes quantités de php/html mélangé. Je peux inclure le fichier et appeler une fonction dans le fichier de feuille de calcul, et cela fonctionne, mais le shortcode n'a jusqu'à présent rien fait d'autre que d'imprimer le shortcode lui-même. Mais si c'est une méthode incorrecte, je ne veux pas perdre de temps à essayer de la faire fonctionner.

Des idées sur comment je peux faire ça? Je suppose que je pourrais simplement analyser manuellement the_post () et traiter moi-même un shortcode, mais je détesterais le faire si une méthode que je peux utiliser est intégrée.

Plus d'informations
J'ai essayé d'expérimenter avec des codes courts. Dans mon functions.php (que je sais est utilisé parce que je charge des fichiers javascript et css):

function register_shortcodes() {
  add_shortcode('spreadsheet_placeholder', 'display_spreadsheet');
}
add_action( 'init', 'register_shortcodes');

J'ai mis une balise [spreadsheet_placeholder] au milieu d'une page et la page rendue avec cette balise au milieu. Jusqu'à aujourd'hui, le tag était affiché, mais tout à l'heure, j'ai eu la brillante idée d'inclure le fichier php externe contenant la fonction (display_spreadsheet).

J'ai obtenu la feuille de calcul à afficher après avoir inclus le fichier php, mais pas comme je le voulais. Mais ça a marché. Il vient d'afficher au-dessus du contenu plutôt qu'au milieu. J'avais lu que je devais renvoyer les données, pas seulement les sortir directement, alors je m'attendais à quelque chose comme ça.

J'avais essayé d'utiliser une variable nowdoc pour enregistrer la fonction entière dans une variable, mais je pense que c'est trop optimiste (peut-être beaucoup), car j'ai mélangé php et html avec des balises php, je suppose donc que je devrais entrer dans le code php et enregistrez-le en tant que plusieurs variables et concaténer ensemble pour renvoyer le code entier. Mais c'est plus un problème php que WordPress, je suppose.

À ce stade, je ne sais pas ce qui est le plus facile: faire cela, ou analyser une balise semblable à un shortcode dans le contenu de la page, et faire la logique dans le code.

La solution

Merci à bonger et à Brad Dalton pour l’aide apportée à l’utilisation de ob_start (), chose que je n’avais jamais utilisée auparavant.

J'ai sorti mon code php/html original de son fichier et je l'ai mis dans un fichier séparé, à l'intérieur d'une fonction. J'ai inclus ce fichier dans functions.php et pointé l'enregistrement du shortcode vers la fonction. Puis, à l'aide de l'exemple de Brad, j'ai renvoyé le fichier entier à la fin et tout fonctionnait parfaitement.

Merci à vous deux. Je suis contente des résultats, tout comme mon fils.

2
Marty Fried

Voici comment coder le shortcode

function foobar_func( $atts ){
    return "foo and bar";
}
add_shortcode( 'foobar', 'foobar_func' );

Et pour exécuter une fonction en utilisant la mise en mémoire tampon de sortie

add_shortcode( 'shortcode_tag', 'function_name' );
function function_name($atts) {
    ob_start();

    // Add your code

    $var = ob_get_contents();
    ob_end_clean();
    return $var;

}
1
Brad Dalton