Comment faire en sorte que ma page d'accueil affiche uniquement le dernier post collant, plus les widgets habituels?

4

WP 3.3.1, Suffusion 4.0.2

J'essaie de comprendre comment faire en sorte que ma page d'accueil affiche uniquement le dernier message marqué comme étant collant. Je ne trouve pas comment faire cela dans la documentation.

Ce que j'essaie de faire est d'utiliser une combinaison de dates de publication et d'expiration futures (via le plugin Atropos) pour contrôler ce qui apparaît sur ma page d'accueil.

Des suggestions? Existe-t-il un plugin avec un shortcode qui me permet d'insérer le dernier post du stick?

    
posée O. Jones 27.02.2012 - 20:53

2 réponses

4

Si je vous ai bien compris, vous souhaitez afficher uniquement le dernier post collant uniquement sur la page d'accueil. J'ai eu le même problème il y a un mois ou deux et j'ai reçu une aide fantastique de la communauté ici, à WordPress Answers. La solution consiste à exécuter deux boucles dans votre fichier index.php. Un pour extraire uniquement le dernier post collant et le second pour afficher tous les autres types de posts.

Voici le lien , mais je posterai également mon code pour résoudre ce problème .

<?php get_header(); ?>
<?php get_sidebar( 'left' ); ?>

<?php if ( is_home() && !is_paged() ) : ?>
<div id="post-wrapper">
    <?php
        // Get IDs of sticky posts
        $sticky = get_option( 'sticky_posts' );
        // first loop to display only my single, 
        // MOST RECENT sticky post
        $most_recent_sticky_post = new WP_Query( array( 
            // Only sticky posts
            'post__in'            => $sticky, 
            // Treat them as sticky posts
            'ignore_sticky_posts' => 1, 
            // Order by date to get the most recently published sticky post
            'orderby'             => date, 
            // Get only the one most recent
            'posts_per_page'      => 1
        ) );
        ?>

    <?php while ( $most_recent_sticky_post->have_posts() ) :  $most_recent_sticky_post->the_post(); ?>
        <!-- your code to display most recent sticky -->
    <?php endwhile; wp_reset_query(); ?>

<?php endif; ?>

<?php
    $all_other_posts = array(
        'post__not_in'  => get_option( 'sticky_posts' )
    );

    global $wp_query;
    $merged_query_args = array_merge( $wp_query->query, $all_other_posts );
    query_posts( $merged_query_args );
?>

<?php if( have_posts() ) : ?>
    <?php while( have_posts() ) : the_post(); ?>
        <!-- your code to display all other posts -->
    <?php endwhile; ?>
<?php endif; ?>
</div> <!-- end #post-wrapper -->

Évidemment, ce code n'est pas copier-coller pour tout le monde. Cela a fonctionné pour moi dans la structure de code que j'avais à l'époque. Aussi, pardonnez le formatage méchant: P

    
réponse donnée cmegown 27.02.2012 - 21:22
1

Merci beaucoup pour cela! C'était très utile. Un commentaire: si vous souhaitez afficher le message le plus récent en tant que publication sélectionnée (c.-à-d. Si une publication n'a pas été collée), et que vous ne souhaitez pas que cette publication soit dupliquée dans la liste normale, cliquez sur premier changement de boucle:

while ( $most_recent_sticky_post->have_posts() ) :  $most_recent_sticky_post->the_post(); 

à:

while ( $most_recent_sticky_post->have_posts() ) :  $most_recent_sticky_post->the_post(); 
$do_not_duplicate = $post->ID; 

et dans la seconde boucle, changez:

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

à

if( have_posts() ) : while( have_posts() ) : the_post();
if( $post->ID == $do_not_duplicate ) continue;

Bruce

    
réponse donnée Bruce 10.05.2012 - 04:41

Lire d'autres questions sur les étiquettes