Добавление второго цикла в тему Wordpress на отдельной странице

Я пытаюсь добавить два цикла в тему на двух отдельных страницах: дома и в блоге.

Блог — это, по сути, индекс постов. Это то, что большинство страниц Wordpress по умолчанию используют в качестве домашней страницы. Чтобы выполнить это, я перешел к «настройкам чтения» и установил «отображение главной страницы» как «статический», при этом «главная страница» была настроена на домашнюю страницу, которую я настроил на страницах Wordpress, а «страница сообщений» - на страницу блога.

Теперь проблема в том, что когда я добавляю цикл на домашнюю страницу, он не работает, по-видимому, потому, что моя страница сообщений настроена на другую страницу.

Итак, как мне заставить цикл работать на домашней странице, а также на странице блога? Кстати, цикл домашней страницы — это просто заголовок поста + дата +, возможно, выдержки. Нужно ли полностью переделывать тему или это просто невозможно в Wordpress?

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

<?php if(have_posts()) : ?>
        <?php while(have_posts()) : the_post() ?>

person Ben Moseley    schedule 11.08.2010    source источник


Ответы (2)


Существует как минимум три способа запуска пользовательских запросов в WordPress.

Query_posts() может определить строку запроса вашего второго цикла. Это легко и очень часто сделать. Этот код представляет собой базовую структуру, которую я скопировал со страницы codex для query_posts():

//The Query
query_posts('posts_per_page=5');

//The Loop
if ( have_posts() ) : while ( have_posts() ) : the_post();
 ..
endwhile; else:
 ..
endif;

//Reset Query
wp_reset_query();

Вы также можете использовать похожий метод get_posts().

<ul>
 <?php
 global $post;
 $myposts = get_posts('numberposts=5&offset=1&category=1');
 foreach($myposts as $post) :
   setup_postdata($post);
 ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
 <?php endforeach; ?>
 </ul> 

Обе функции принимают ряд аргументов, которые объясняются на странице справочника по функциям query_posts. Аргументы, показанные выше, являются только примерами. Список доступных аргументов длинный.

Третий доступный вам метод — создание другого экземпляра объекта WordPress Query (основной метод запроса WP ). Query_posts и get_posts выполняют второй вызов базы данных после того, как WordPress запускает wp_query по умолчанию. Если вы очень обеспокоены производительностью или сокращением числа обращений к базе данных, я предлагаю узнать, как вы можете взаимодействовать с wp_query, чтобы изменить запрос по умолчанию перед его запуском. Класс wp_query предоставляет ряд простых методов для изменения запроса.

Удачи!

person kevtrout    schedule 11.08.2010
comment
Спасибо за ответ. Я новичок в Wordpress и понятия не имею, куда я могу поместить этот код, потому что прямо сейчас файл index.php теперь связан со страницей блога через настройки чтения. И поправьте меня, если я ошибаюсь, но вы не можете просто вставить php-код для второго цикла в середине статической страницы WP? - person Ben Moseley; 12.08.2010
comment
В вашей теме должен быть файл с именем «page.php». Если вы не скопируете и не переименуете его, а также не измените имя шаблона в файле, где указано /*имя шаблона: xxxxxxx/*, это будет шаблон статической страницы. Вы помещаете мой код выше в этот файл или тот, который вы создаете и используете в качестве шаблона домашней страницы. Если вы создаете альтернативный файл шаблона страницы, обязательно установите его в качестве шаблона домашней страницы, отредактировав свою страницу в области администрирования WP, и выберите файл в раскрывающемся списке шаблонов страниц, обычно в правом столбце страницы редактирования. экран. - person kevtrout; 13.08.2010
comment
Разве это не заставит его отображаться на каждой статической странице, а не только на домашней странице? - person Ben Moseley; 13.08.2010
comment
Если у вас есть другие страницы WordPress, использующие шаблон page.php, сделайте копию этого файла и переименуйте его. Также в файле вы увидите /*Имя шаблона: шаблон страницы*/ в верхней части. шаблон страницы может быть чем-то другим. Измените имя на уникальное имя. Затем отредактируйте страницу WordPress, на которой вы хотите отобразить пользовательский цикл, в области администратора, изменив шаблон страницы на тот, который вы создали. В правом столбце вы увидите раскрывающийся список для выбора шаблона страницы. Вы увидите свой собственный шаблон в списке. Выберите его и сохраните. Теперь второй цикл будет отображаться только на этой странице. - person kevtrout; 13.08.2010
comment
Хорошо, спасибо. Даже не знал о шаблонах. В итоге я использовал front-page.php, потому что на самом деле это шаблон, который моя домашняя страница по умолчанию использует с учетом моих настроек чтения. Что касается цикла, я использовал новый WP_query(), и теперь он работает отлично. Спасибо, что указали мне правильное направление. - person Ben Moseley; 14.08.2010

Возможно, WordPress не запускает для вас цикл, потому что вы используете статическую страницу. Но если эта статическая страница определена в вашей теме (поскольку вы включили код PHP для отображения цикла, я предполагаю, что это так), вы всегда можете запустите там новый цикл самостоятельно. Просто вызовите query_posts самостоятельно, и ваш код должен начать работать.

person Jan Fabry    schedule 11.08.2010
comment
Привет, спасибо за ответ. В итоге я использовал новый WP_query, поскольку он был вложенным циклом и использовал шаблон по умолчанию front-page.php. - person Ben Moseley; 14.08.2010