web-dev-qa-db-fra.com

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

WP 3.3.1, Suffusion 4.0.2

J'essaie de comprendre comment faire en sorte que la page de couverture ne contienne que le message le plus récent 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 post-publication et d'expiration futures (via le plugin Atropos) pour contrôler ce qui apparaît sur ma page d'accueil.

Aucune suggestion? Y at-il un plugin qui a un shortcode qui me permet d’insérer le dernier post du stick?

4
O. Jones

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 post.

Voici le link , mais je posterai aussi mon code pour 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 -->

De toute évidence, 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

4
cmegown

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 (par exemple, 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

1
Bruce