Como fazer com que minha primeira página exiba apenas a postagem mais recente, mais os widgets usuais?

4

WP 3.3.1, Sufusão 4.0.2

Estou tentando descobrir como exibir minha primeira página apenas com a postagem mais recente marcada. Não consigo encontrar como fazer isso na documentação.

O que estou tentando fazer é usar uma combinação de datas e expirações futuras da publicação de postagens (por meio do plug-in Atropos) para controlar o que aparece na minha página inicial.

Alguma sugestão? Existe um plugin que tem um shortcode que me permite inserir o post stick mais recente?

    
por O. Jones 27.02.2012 / 20:53

2 respostas

4

Se eu estou entendendo corretamente, você quer mostrar apenas a postagem mais recente somente na primeira página. Eu tive o mesmo problema um mês ou dois atrás e consegui uma ajuda fantástica da comunidade aqui no WordPress Answers. A solução é executar dois loops no seu arquivo index.php. Um para puxar apenas o post pegajoso mais recente e o segundo para exibir todos os outros tipos de postagens.

Este é o link , mas também postarei meu código para esse problema .

<?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 -->

Obviamente, esse código não é copiar e colar para todos. Funcionou para mim na estrutura de código que eu tinha na época. Além disso, perdoe a formatação desagradável: P

    
por cmegown 27.02.2012 / 21:22
1

Muito obrigado por isso! Foi muito útil. Um comentário: se você deseja exibir a postagem mais recente como uma postagem em destaque (ou seja, se uma postagem não ficou grudenta) e não deseja que essa postagem seja duplicada na lista normal, primeira mudança de loop:

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

para:

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

e no segundo loop, mude:

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

para

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

Bruce

    
por Bruce 10.05.2012 / 04:41