Wordpress show the_content захватывает неправильный контент сообщения. Зачем?
Моя проблема в том, что я показываю некоторые сообщения из категории "события". Затем чуть позже на той же странице я хочу отобразить случайный пост из категории "Спиллер", и это прекрасно работает. Он получает случайное сообщение, показывает заголовок, миниатюру, но когда я говорю "показать the_content" (или the_excerpt), он показывает все содержимое (или выдержки) сообщений в категории "события". Пожалуйста, помогите мне решить это!
<div class="well span6 Padding10">
<h4 class="titleFont MarginBottom20">KOMMENDE BEGIVENHEDER</h4>
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
'category_name' => 'events', // Change these category SLUGS to suit your use.
'paged' => $paged
);
query_posts( $args ); ?>
<ul>
<?php
while ( have_posts() ) : the_post(); ?>
<li>
<a href="<?php the_permalink(); ?>"><strong><?php the_title(); ?></strong></a>
</li>
<?php endwhile; ?>
</ul>
</div>
<div class="span6 well" style="height: 250px;"><h4 class="titleFont">SPILLER HIGHLIGHT</h4>
<div class="row-fluid">
<?php
$args = array(
'numberposts' => 1,
'orderby' => 'rand',
'category_name' => 'spiller'
);
$rand_posts = get_posts( $args );
foreach ( $rand_posts as $post ) : ?>
<div class="span5"><?php the_post_thumbnail( array( 150, 150 ) ); ?></div>
<div class="span6 MarginTop10">
<h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
<!-- THIS IS WHERE IT MESSES UP: --><?php the_content(); ?>
</div>
<?php endforeach; ?>
</div>
</div>
1 ответ
Прежде всего, вам нужно избегать использования query_posts. Это влияет на многие глобалы Wordpress и изменяет цикл по умолчанию, которого - если только это не является вашим конкретным намерением - абсолютно необходимо избегать, так как это также может привести к проблемам с производительностью.
Пожалуйста, обратите внимание на замену query_posts на WP_Query.
Кроме того, вам нужно сбросить ваши постданные, а также настроить новые постданные в следующем цикле.
Сброс запроса::
<?php
while ( have_posts() ) : the_post();
?>
<li>
<a href="<?php the_permalink(); ?>"><strong><?php the_title(); ?></strong></a>
</li>
<?php endwhile;wp_reset_query(); ?>
Настроить:
foreach( $rand_posts as $post ) : setup_postdata($post); ?>
Сбросить постданные:
<?php endforeach;wp_reset_postdata(); ?>
Почему это нужно сделать?
Каждый раз, когда вы используете одну из тех удобных функций Wordpress с префиксом "the_", эта функция ссылается на $post Global. query_posts изменяет этот Global (как упоминалось выше), и если вы планируете ссылаться на этот Global в отдельном цикле, вы должны иметь возможность изменить его снова на лету.
Сброс ваших запросов - это просто хорошая общая практика, чтобы убедиться, что все ваши глобальные переменные вернулись к настройкам Wordpress по умолчанию. Но setup_postdata($post_object) - это то, что на самом деле позволяет нам изменить этот Global на текущий объект в нашем пользовательском цикле.
Причина, по которой WP_Query настолько эффективен, состоит в том, что сброс запроса больше не является необходимым, поскольку циклы WP_Query локализуются для этого конкретного объекта и не изменяют глобальный $wp_query (который случайно влияет на множество других глобальных переменных).
Вот некоторая полезная информация о query_posts против WP_Query, которая должна объяснить вам кое-что лучше.
Хмель это помогает.