get_template_part & get_post_format (Créer un compte)

  • Statut : non résolu
15 sujets de 1 à 15 (sur un total de 27)
  • Auteur
    Messages
  • #554647
    camo.mille
    Participant
    Initié WordPress
    13 contributions

    Ma configuration WP actuelle
    – Version de WordPress : dernière
    – Version de PHP/MySQL :
    – Thème utilisé : perso
    – Extensions en place : aucune
    – Nom de l’hebergeur : local
    – Adresse du site :

    Problème(s) rencontré(s) :

    Bonjour,

    je rencontre des problèmes avec les instructions get_template_part & get_post_format.

    la partie de code suivante fait planter ma page et je ne comprends pas pourquoi. :
    $format = get_post_format();
    get_template_part( ‘content’, $format);

    Le code complet :

    <?
    print("
    <aside id='gauche' class='unit-".$unitgauche."'>
    « );

    get_sidebar(‘gauche’);
    print( »
    </aside>
    <main class='unit-".$unitmain."'>
    « );
    if (have_posts()) : while(have_posts()) : the_post();
    echo  » <div class='article'>« ;

    $format = get_post_format();
    get_template_part( ‘content’, $format); // dans mon arborescence, j’ai une page content.php et une page content-gallery.php. ces deux pages ne sont jamais appelées.

    the_post_navigation ();
    if (comments_open() || get_comments_number()){
    comments_template();
    }

    echo « </div>« ;
    endwhile;
    endif;

    print( »
    </main>
    <aside id='droite' class='unit-".$unitdroite."'> « );
    get_sidebar(‘droite’);
    echo « </aside>« ;
    ?>

    </body>
    </html>

    Est-ce que que quelqu’un parmi vous voit d’où vient l’erreur ?

    #1022839
    Benzouye
    Participant
    Maître WordPress
    577 contributions

    Bonjour,

    La fonction get_template_part() va simplement rechercher le fichier php précisé.
    Si le fichier content-gallery.php n’est pas utilisé c’est probablement que la page appelée n’a pas de format d’article gallery … ou qu’il n’y a pas d’articles à afficher …
    Quel est ce fichier avec le code que tu nous montres ?

    Par ailleurs, je t’engage à mieux structurer ton code, en évitant les print, et en indentant tes balises HTML pour mieux t’y retrouver :

    <aside id="gauche" class="unit-« >

    </aside>
    <main class="unit-« >

    <div class="article">



    </div>


    <aside id="droite" class="unit-« >

    </aside>

    #1022840
    Gueblo
    Participant
    Maître WordPress
    1058 contributions

    évite cette notation <? et utilise plutôt <?php

    il y a un espace après the_post_navigation ce qui donne the_post_navigation (); alors qu’il n’en faut pas, ce qui donnerait the_post_navigation();

    pour le reste, ta question est floue dans le sens où on ne sait même pas où est-ce que tu utilises ce code.

    #1022841
    camo.mille
    Participant
    Initié WordPress
    13 contributions

    Bonjour,

    Merci pour vos réponses.

    Concernant la structure du code, est-ce que les print sont moins bien gérés par WordPress ? je n’ai pas l’habitude d’utiliser toutes ces balises php. Je préférais la solution des print, pour autant qu’elle ne soit pas source d’erreur.. ?

    Le code dont on discute est issus de la page single.php. Lorsque je clique sur un article, la page single m’affiche une page blanche, avec uniquement une balise

    issue de single.
    Dans les pages crées, j’ai un content.php et un content-gallery.php avec un article test en type gallerie. Si j’ai bien compris les articles par défaut sont affichés par content.php du coup, je devrais aussi voir cette page.

    Question supplémentaire : n’existe-t-il pas un outil pour débugué le code ? Les erreurs habituels qu’on voit quand on code du php ne s’affichent pas. (parse error et cie.).

    merci pour vos infos

    #1022842
    Gueblo
    Participant
    Maître WordPress
    1058 contributions

    Le code dont on discute est issus de la page single.php. Lorsque je clique sur un article, la page single m’affiche une page blanche, avec uniquement une balise

    issue de single.
    Dans les pages crées, j’ai un content.php et un content-gallery.php avec un article test en type gallerie. Si j’ai bien compris les articles par défaut sont affichés par content.php du coup, je devrais aussi voir cette page.

    j’aurais vraiment plaisir à te répondre mais je ne comprends pas ce que tu dis…

    #1022843
    camo.mille
    Participant
    Initié WordPress
    13 contributions

    mince.. je pars de loin on dirait 😕 mes excuses si je ne suis pas claire :(

    Je recommence.

    J’ai une page single.php avec pour code

    <?php
    // au départ : copie de index.php
    get_header();


    //test de quelle side bar est activée et définition des largeurs de boite en conséquence

    if (is_active_sidebar('gauche') && is_active_sidebar('droite')) {

    $unitgauche = 25;
    $unitdroite = 25 ;
    $unitmain = 50;
    }
    else if (is_active_sidebar('gauche') && is_active_sidebar('droite')==false){
    $unitgauche = 25;
    $unitdroite = 0 ;
    $unitmain = 75;
    }
    else if (is_active_sidebar('gauche') == false && is_active_sidebar('droite')){
    $unitgauche = 0;
    $unitdroite = 25;
    $unitmain = 75;
    }
    else if (is_active_sidebar('gauche') == false && is_active_sidebar('droite') == false){
    $unitgauche = 0;
    $unitdroite = 0;
    $unitmain = 100;
    }

    print("
    <aside id='gauche' class='unit-".$unitgauche."'>
    « );

    get_sidebar(‘gauche’);
    print( »
    </aside>

    « );

    echo « <h3>c’est la page single.php qui est affichée</h3>« ;
    echo  » <div class='article'>« ;

    if (have_posts())
    {
    while ( have_posts() ) : the_post();

    get_template_part( ‘content’, get_post_format() );

    the_post_navigation();

    if (comments_open() || get_comments_number()){
    comments_template();
    }
    endwhile;
    }

    echo « </div>« ;

    print( »

    <aside id='droite' class='unit-".$unitdroite."'> « );
    get_sidebar(‘droite’);
    echo « </aside>« ;
    ?>

    Dans le même répertoire, j’ai une page content.php

    <?php

    echo "<header class='article'><h1>« ;
    the_title();
    echo « </h1></header>« ;
    echo « <div class='contenu'>« ;
    if (has_excerpt())
    {
    the_excerpt();
    the_content();
    echo « </div>« ;
    echo « <h2> content.php est affichée</h2>« ;

    echo « <footer class='article'> »
    the_category();
    echo  » – « ;
    edit_post_link();
    echo « </footer>« ;
    ?>

    Ainsi qu’une page content-gallery.php

    <?
    // au départ : copie de single.php
    get_header();


    //test de quelle side bar est activée et définition des largeurs de boite en conséquence

    if (is_active_sidebar('gauche') && is_active_sidebar('droite')) {

    $unitgauche = 25;
    $unitdroite = 25 ;
    $unitmain = 50;
    }
    else if (is_active_sidebar('gauche') && is_active_sidebar('droite')==false){
    $unitgauche = 25;
    $unitdroite = 0 ;
    $unitmain = 75;
    }
    else if (is_active_sidebar('gauche') == false && is_active_sidebar('droite')){
    $unitgauche = 0;
    $unitdroite = 25;
    $unitmain = 75;
    }
    else if (is_active_sidebar('gauche') == false && is_active_sidebar('droite') == false){
    $unitgauche = 0;
    $unitdroite = 0;
    $unitmain = 100;
    }

    print("
    <aside id='gauche' class='unit-".$unitgauche."'>
    « );

    get_sidebar(‘gauche’);
    print( »
    </aside>

    « );
    if (have_posts()) : while(have_posts()) : the_post();
    echo  » <div class='article'><h3> content-gallery.php est affichée</h3>« ;

    print( »
    <h2> page content-gallery.php<a href=' ".get_the_permalink()." '> « .get_the_title(). » </a></h2>
    « );
    the_content();

    get_template_part(‘content’, get_post_format());
    the_post_navigation ();
    if (comments_open() || get_comments_number()){
    comments_template();
    }


    echo « </div>« ;
    endwhile;
    endif;
    print( »

    <aside id='droite' class='unit-".$unitdroite."'> « );
    get_sidebar(‘droite’);
    echo « </aside>« ;
    ?>

    Sur mon site, j’ai écrit plusieurs articles, en format par défaut et en format gallery.
    Quand je clique sur un article de type par défaut, j’obtiens uniquement une page blanche avec le titre

    de la page single, alors que si j’ ai bien compris, c’est la page content.php qui devrait être appelée par l’instruction get_template_part.
    Quand je clique sur une article de type gallery, j’obtiens… une page qui pourrait être scrollée à l’infini avec d’écrit, un nombre incalculable de fois
    « Navigation de l’article
    Article précédent
    un autre article sur un sujet x – Format par défaut
    Laisser un commentaire & formulaire qui va avec. « 
    Bref, je suis perdue et j’ai très envie de comprendre pourquoi.
    Un grand merci d’avance pour le temps passé à m’aider.

    #1022844
    Gueblo
    Participant
    Maître WordPress
    1058 contributions

    si tu utilises le format par défaut alors get_post_format() renvoie FALSE
    il faut donc faire quelque chose comme ça :

    if(!get_post_format()) {
    get_template_part(‘single’);
    } else {
    get_template_part(‘format’, get_post_format());
    }

    et créer un fichier content-standard.php qui dans ton cas contiendra la même chose que single.php

    #1022845
    Gueblo
    Participant
    Maître WordPress
    1058 contributions

    j’ai oublié d’enlever la derniere phrase, ne la prend pas en compte

    #1022846
    camo.mille
    Participant
    Initié WordPress
    13 contributions

    Ok.
    Je comprends pas pourquoi tu mets ‘format’ dans le get_template_part. j’avais compris que cette instruction concaténait le premier argument, avec le deuxième et que du coup ce qui va dans la première virgule, c’est le début du nom de fichier, à savoir si le fichier c’est content-image.php, on met ‘content’, dans la première virgule.

    #1022847
    camo.mille
    Participant
    Initié WordPress
    13 contributions

    et ce que je ne comprends pas non plus, c’est que le code que tu proposes est chez moi dans la page single.php. Donc single.php s’appelle elle-même ? c’est curieux, non ?

    #1022848
    Gueblo
    Participant
    Maître WordPress
    1058 contributions

    il faut adapter le code à ton cas
    ça donnerait :

    if(!get_post_format()) {
    get_template_part(‘content’);
    } else {
    get_template_part(‘content’, get_post_format());
    }

    #1022849
    Benzouye
    Participant
    Maître WordPress
    577 contributions

    Je pense que Gueblo t’as plus embrouillé qu’autre chose …

    Reprenons les choses calmement 🙂

    Tu as un fichier single.php qui est exécuté par WordPress lorsque tu essayes d’afficher la page d’un article seul. Dans ce fichier tu charges l’entête de ton site (get_header) puis en fonction du post_format tu exécutes le fichier content-{post-format}.php. Dans ce fichier là, il ne faut surtout pas rappeler le header comme tu le fais, cela fait deux headers pour la même page => plantage ! Les fichiers content.php et content-gallery.php ne doivent contenir que les instructions d’affichage du contenu de l’article en question, c’est ton fichier single.php qui affiche tout le reste (header, sidebar et footer dans ton cas).

    Si je reprends ton exemple, les fichiers single.php et content.php sont corrects, par contre le fichier content-gallery.php n’est pas correct, il doit plutôt reprendre la structure de content.php et non de single.php …
    Pour essai, copie juste content.php et écrase content-gallery.php avec, et modifie le h2 pour le différencier de content.php 😉

    Sinon, si get_post_format() retourne false, get_template_part( ‘content’, get_post_format() ) ira chercher content.php … pas besoin de tester le format de post avant …

    #1022850
    Gueblo
    Participant
    Maître WordPress
    1058 contributions

    Benzouye a complètement raison, je n’aurais pas mieux dit !
    Et effectivement ce que j’ai dit c’est n’importe quoi, désolé. Je me suis appuyé sur des infos anciennes et que je n’avais pas encore testées.

    #1022851
    camo.mille
    Participant
    Initié WordPress
    13 contributions

    OK, ça s’éclaircit.
    Merci pour les explications.
    Par contre, quand je clique sur un article, j’ai tjs une single.php qui m’affiche une page blanche, à l’exception de son titre, quelque soit le type d’article affiché.

    #1022852
    Gueblo
    Participant
    Maître WordPress
    1058 contributions

    ce serait pas à cause de ça ? :

    if (has_excerpt())
    {
    the_excerpt();
    the_content();

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