Excerpt получает выдержку страницы, а не самую последнюю опубликованную выдержку

См. Www.pinosalon.com. Недавний блог – это то же самое, что и Welcome.

На шаблоне page-home.php, который используется в качестве домашней страницы, у меня есть цикл, который просто отображает текст приветствия.

Несколько строк вниз по шаблону, за пределами цикла, я получаю последние сообщения и отображаю последнее сообщение с помощью the_excerpt (). Название и дополнительная ссылка работают, но the_excerpt захватывает контент из цикла, а не из последнего сообщения.

После обновления кода на основе решения, предложенного другим вопросом, выдержка больше не отображается.

Вот код, который я использую:

//Block displays the current page's content <?php while ( have_posts() ) : the_post(); ?> <h1><?php the_title(); ?></h1> <?php the_content(); ?> <?php endwhile; ?> //Block that should display the latest post <?php $args = array( 'numberposts' => '1','post_type' => 'post' ); $recent_posts = wp_get_recent_posts( $args ); foreach( $recent_posts as $recent ) : setup_postdata($recent); echo '<h3><a href="' . get_permalink($recent["ID"]) . '" title="Look '.esc_attr($recent["post_title"]).'" >' . $recent["post_title"].'</a></h3>'; echo the_excerpt(); echo '<a href="' . get_permalink($recent["ID"]) . '" title="Look '.esc_attr($recent["post_title"]).'" >Read More</a>'; endforeach; ?> 

Ваша проблема в том, что вы используете $recent_posts как имя переменной. Если setup_postdata() не работает, то ваш the_excerpt() должен вернуть все выдержки из текущей страницы.

На setup_postdata() codex :

Вы должны передать ссылку на глобальную переменную $post , иначе функции, такие как the_title (), не будут работать должным образом.

Поэтому измените это:

 $args = array( 'numberposts' => '1','post_type' => 'post' ); $recent_posts = wp_get_recent_posts( $args ); foreach( $recent_posts as $recent ) : setup_postdata($recent); 

К этому:

 global $post; $args = array( 'numberposts' => '1','post_type' => 'post' ); $recent_posts = wp_get_recent_posts( $args ); foreach( $recent_posts as $post ) : setup_postdata($post); 

Еще лучше, используйте WP_Query, который идеально подходит для вторичных циклов!

 $args = array( 'posts_per_page' => '1','post_type' => 'post' ); $recent_posts = new WP_Query( $args ); if( $recent_posts->have_posts() ) : while( $recent_posts->have_posts() ) : $recent_posts->the_post(); 

И замените endforeach; с endwhile; endif; endwhile; endif;


Лучшая практика бонусов, никогда не используйте page-{anything}.php для имени шаблона, поскольку это зарезервированный шаблон в иерархии шаблонов . Для статической первой страницы используйте front-page.php вместо этого.)