WordPress боковая панель и цикл PHP-код искажают друг друга - PullRequest
2 голосов
/ 28 апреля 2010

Я отредактировал файл single.php в соответствии со своими потребностями, и он работает. Я оставил только ту часть цикла, в которой:

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <div <?php post_class() ?> id="post-<?php the_ID(); ?>">
        <div class="entry">
        <?php the_content('<p class="serif">Read the rest of this entry &raquo;</p>'); ?>
        <?php wp_link_pages(array('before' => '<p><strong>Pages:</strong> ', 'after' => '</p>', 'next_or_number' => 'number')); ?>     </div>
    </div>
<?php endwhile; else: ?>

    <p>Sorry, no posts matched your criteria.</p>

<?php endif; ?>

Отображает только текст, как я хочу. Проблема в том, что я добавляю следующий код для использования в качестве боковой панели в шаблоне:

<?php query_posts('showposts=10'); ?>
 <?php while (have_posts()) : the_post(); ?> 
<a href="<?php the_permalink() ?>" rel="bookmark" title="Link to <?php the_title(); ?>">
<?php the_title(); ?></a><br /> 
<?php endwhile;?> 

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

Так почему же WordPress ведет себя так?

Ответы [ 2 ]

5 голосов
/ 28 апреля 2010

Причина этого в том, что Wordpress - это кошмарный лабиринт глобальных переменных.query_posts() является одним из худших преступников.Если вы проверите документацию для этой функции, вы увидите, что они даже должны предупредить вас, чтобы она в основном не использовалась:

Важное примечание

Функция query_posts предназначена для использования только для изменения цикла главной страницы.Он не предназначен для создания вторичных циклов на странице.Если вы хотите создать отдельные циклы вне основного, вы должны создать отдельные объекты WP_Query и использовать их вместо этого.Использование query_posts в циклах, отличных от основного, может привести к тому, что ваш основной цикл станет неправильным и, возможно, отобразит то, чего вы не ожидали.вместо этого, а именно WP_Query объект (почему они еще не обновили "главные" страницы, чтобы избавиться от нелепых вещей "Цикла", пока под вопросом).

Вы идетечтобы захотеть сделать что-то подобное на боковой панели:

<?php
$recentPosts = new WP_Query();
$recentPosts->query('showposts=10');
while ($recentPosts->have_posts()) : $recentPosts->the_post(); ?>

<a href="<?php the_permalink() ?>" rel="bookmark"
    title="Link to <?php the_title(); ?>">
<?php the_title(); ?></a><br /> 
<?php endwhile;?> 

Google по поводу того, как использовать WP_Query, если вы хотите больше примеров .

1 голос
/ 30 апреля 2010
запроса ( 'showposts = 10'); while ($ latestPosts-> have_posts ()): $ RecentPosts-> the_post (); ?>

"

rel = "bookmark" title = "Ссылка на">

читая код, который вы помещаете в боковую панель, вы пытаетесь отобразить последние 10 заголовков сообщений в боковой панели, верно? если это так, вы можете просто использовать эту строку:

`<?php wp_get_archives('title_li=&type=postbypost&limit=10'); ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...