web-dev-qa-db-fra.com

Chargement du modèle de page dans le shortcode

J'essaie de charger un modèle de page dans un shortcode afin de pouvoir facilement charger le contenu où je veux.

J'ai fait des recherches et beaucoup de gens ont dit que ce code a fonctionné pour eux, mais pour une raison quelconque, cela ne semble pas charger mon modèle correctement car je ne reçois qu'une page vierge.

Je sais que le shortcode s'exécute car il ne s'affiche pas en texte brut, donc je suppose qu'il y a un problème avec la façon dont je charge le modèle.

Toute aide est très appréciée .

public function register(){
        add_shortcode( 'sponsor_main_page', array($this,'my_form_shortcode') );
            $RegistrationFormId = esc_attr( get_option( 'ik_form_id' ) );
        }

function my_form_shortcode() {
        ob_start();
        get_template_part( 'template-sponsors.php' );
        return ob_get_clean();
    }
2
Ibrarr Khan

get_template_part prend slug comme premier paramètre et non nom de fichier.

Il devrait donc être:

get_template_part( 'template-sponsors' );

Et avec plus de détails ... Cette fonction prend deux paramètres:

get_template_part (chaîne $ slug, chaîne $ name = null)

Et à l'intérieur, le nom d'un fichier est construit comme ceci:

if ( '' !== $name )

$ templates [] = "{$ slug} - {$ name} .php"; $ templates [] = "{$ slug} .php";

Donc, comme vous pouvez le voir, le .php la pièce est ajoutée automatiquement. Votre code essaiera donc de charger le fichier appelé template-sponsors.php.php et il n'y a pas un tel fichier, je suppose.

1
Krzysiek Dróżdż

Il est probable que cela se produise car vous ajoutez .php au paramètre dans get_template_part(). Voici comment j'écrirais le code de votre question:

Prérequis pour que cet exemple fonctionne:

  • Créez un dossier dans votre répertoire de thème appelé template-parts.
  • Créez un nouveau fichier dans ce répertoire appelé template-sponsors.php
  • Cela suppose que votre shortcode est [sponsor_main_page]

Code à mettre dans vos fonctions.php:

function custom_theme_load_sponsors_template() {
  ob_start();
  get_template_part( 'template-parts/template-sponsors' ); 
  return ob_get_clean();
}
add_shortcode( 'sponsor_main_page', 'custom_theme_load_sponsors_template' );
1
Sunny Johal