web-dev-qa-db-fra.com

Créer une page d'accueil statique avec 3 à 5 publications récentes

Je ne parviens pas à personnaliser la page de couverture/la page de destination pour mon thème personnalisé. J'ai conçu un thème personnalisé et je l'ai codé à l'aide du Underscore .

Si je comprends bien, le codex suggère de créer un fichier page-avant.php et de le personnaliser à cet endroit. Dans , réglage> lecture , j'ai sélectionné Une page statique/Première page (la page souhaitée où je change de message d'accueil statique). En dessous, je veux avoir 3 à 5 articles récents avec des vignettes (activées dans mes fonctions) et des extraits.

Mon page d'accueil.php:

<main id="main" class="site-main" role="main">

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

            <?php get_template_part( 'content', 'page' ); ?>

        <?php endwhile; // end of the loop. ?>

        <h2>Recent Posts</h2>
        <ul>
        <?php
            $args = array( 'numberposts' => '5' );
            $recent_posts = wp_get_recent_posts( $args );
            foreach( $recent_posts as $recent ){
                echo '<li><a href="' . get_permalink($recent["ID"]) . '" title="Look '.esc_attr($recent["post_title"]).'" >' .   $recent["post_title"].'</a> </li> ';
            }
        ?>
        </ul>

</main><!-- #main -->

Cela fonctionne, mais je ne sais pas comment charger vignettes + extraits. Le plus important est-ce correct?

1
nerijusgood

J'aurais tendance à ne pas aller avec wp_get_recent_posts ni même get_posts pour les requêtes personnalisées comme ça. Par défaut, les balises de modèle telles que the_excerpt() ne sont pas disponibles pour ces fonctions et vous devez utiliser setup_postdata($post) pour accéder à ces balises de modèle.

Personnellement, j'utiliserais WP_Query dans un cas comme celui-ci, qui est plus flexible, en particulier lorsque vous avez une requête personnalisée qui doit être paginée.

Voici un exemple de requête personnalisée pour obtenir les 5 derniers messages. Remarque: je n'ai pas inclus de balises HTML. Pour obtenir une liste de tous les arguments disponibles, consultez le lien que j'ai fourni dans WP_Query

$args = array(
    'posts_per_page' => 5,
    'order' => 'DESC'
);

$rp = new WP_Query( $args );

if($rp->have_posts()) :
    while($rp->have_posts()) : $rp->the_post();

       the_title(); // posttitle
       if ( has_post_thumbnail() ) {  // check if the post has a Post Thumbnail assigned to it.
          the_post_thumbnail(); //display the thumbnail
       } 

       the_excerpt(); // displays the excerpt

    endwhile;
    wp_reset_postdata(); // always always remember to reset postdata when using a custom query, very important
endif;

Pour en savoir plus:

2
Pieter Goosen

Vous pouvez utiliser:

get_the_post_thumbnail($recent['ID'], 'post-thumbnail');

afin d'obtenir la vignette. Malheureusement, il n’ya aucun moyen d’obtenir l’extrait, vous pouvez toutefois couper le contenu en utilisant PHP.

Alternativement, il y a un crochet que je n'ai pas utilisé auparavant, vous pouvez l'essayer et voir ses œuvres pour l'extrait:

get_post_field();

0
user58014

Vous pouvez obtenir l'image en utilisant ce code:
$src = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'medium', false, '' ); $thumbnailSrc = $src[0];

'moyen' est la taille de la vignette, vous pouvez le remplacer par miniature, grande ou toute taille spéciale créé avec le support des vignettes sur functions.php ej.
add_image_size( 'postslider', 680,310, true );

J'imprime l'image avec img src="php echo $src; ? n'oubliez pas d'inclure les balises php dans le code

Pour l'extrait, la méthode la plus simple est the_excerpt (); au lieu de the_content ();

0
Fernando Baltazar

Il semble que les deux réponses précédentes vous rapprochent, mais si je comprends bien, vous devrez peut-être remplacer la boucle foreach par un second appel de boucle wordpress, après la requête personnalisée (voir un exemple ici dans la section "exemples"):

La raison pour laquelle je suggère d'utiliser la boucle wordpress est que la fonction the_excerpt() ne fonctionne que dans le cadre d'une boucle standard. Si vous êtes dans "la boucle", vous utiliseriez

the_post_thumbnail( 'your-custom-post-size-here' );

plutôt que

get_the_post_thumbnail

comme le suggère Yusri Mathews. Sa réponse fonctionnera en dehors de "the Loop", dans des cas comme votre boucle foreach.

Mais comme mentionné ci-dessus, si vous êtes dans "the Loop", vous avez accès à the_excerpt() qui devrait vous mener là où vous allez.

0
Iso