web-dev-qa-db-fra.com

Afficher le titre de la page sur la page du blog

J'ai créé une page pour mes articles et un home.php pour la structure.

J'aimerais afficher le nom de la page en haut des articles, mais le résultat est toujours le dernier article.

Mon code:

<?php get_header(); ?>
<section id="primary-content" class="col-md-9">
    <?php the_title(); ?>
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

        <div class="post">
            <h2><a href="<?php the_permalink(); ?>"><?php the_title();?></a></h2>
            <div class="byline">by <?php the_author_posts_link(); ?> on <a href="<?php the_permalink(); ?>"><?php the_time( 'l F d, Y'); ?></a></div>
            <?php the_content('Read More...'); ?>
        </div>
    <?php endwhile; else: ?>
        <p><?php _e('No posts were found. Sorry!'); ?></p>
    <?php endif; ?>

    <div class="navi">
        <div class="right">
        <?php previous_posts_link('Previous'); ?> / <?php
          next_posts_link('Next'); ?>
      </div>
    </div>

</section>

<?php get_sidebar(); ?>

<?php get_footer(); ?>

Où est le problème? Est-il possible d'afficher le nom de la page sur la page du blog?

1
user1452062

L'appel pour le titre de la page est en dehors de la boucle, vous devez donc utiliser cette fonction:

<?php echo get_the_title(); ?> 

Voici le code mis à jour:

<?php get_header(); ?>
<section id="primary-content" class="col-md-9">

    <?php echo get_the_title(); ?> 

    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

        <div class="post">
            <h2><a href="<?php the_permalink(); ?>"><?php the_title();?></a></h2>
            <div class="byline">by <?php the_author_posts_link(); ?> on <a href="<?php the_permalink(); ?>"><?php the_time( 'l F d, Y'); ?></a></div>
            <?php the_content('Read More...'); ?>
        </div>
    <?php endwhile; else: ?>
        <p><?php _e('No posts were found. Sorry!'); ?></p>
    <?php endif; ?>

    <div class="navi">
        <div class="right">
        <?php previous_posts_link('Previous'); ?> / <?php
          next_posts_link('Next'); ?>
      </div>
    </div>

</section>

<?php get_sidebar(); ?>

<?php get_footer(); ?>
1
Matt Royal

Vous utilisez the_title() en dehors de la boucle, ce qui est techniquement incorrect. Il s’agit d’une balise "Loop" qui dépend de la variable global, $post, qui est définie sur la publication en cours à chaque itération de la boucle, mais qui est pré-remplie avec la première publication de la boucle, ce que vous voyez. Pour obtenir le titre de la page elle-même, il vous faut:

$qobj = get_queried_object();
echo $qobj->post_title;

Sachez toutefois que get_queried_object() renvoie différents objets, voire aucun objet, en fonction de la page sur laquelle vous vous trouvez. Vous devez envelopper votre code dans les conditions pour éviter les erreurs.

if (is_singular()) {
    $qobj = get_queried_object();
    echo $qobj->post_title;
}

Ou...

$qobj = get_queried_object();
if(isset($qobj->post_title)) {
    echo $qobj->post_title;
}
0
s_ha_dum