Wordpress цикл (loop) – выводим сообщения блога
Возникла задача для одного из блогов запретить вывод на главную страницу постов из определенной категории. Самое время залезть и немного покопаться в кодексе дабы правильно изменить наш шаблон. Использовать при этом какие-то плагины wordpress, думаю, смысла нет, ведь все решается гораздо проще. Но для начала немного теории.
Итак, wordpress цикл (или loop) используется для отображения каждого из постов вашего блога. С помощью цикла система вордпресс обрабатывает каждый пост и отображает его на текущей страницы, исходя из тех или иных заданных критериев. Любой код HTML или PHP, который указан в цикле, будет применен для всех отображаемых постов. При этом для соответствующих функций в кодексе четко указывается, что мол она может быть использована только в цикле wordpress. Так, например, с помощью цикла на главной странице блога для каждой записи задается оформление (обработка) ее заголовка, категорий и т.п. Таким образом, вы указываете форматирование единожды, а оно применяется ко всем статьям.
Если вы откроете главный файл шаблона index.php, то сможете найти в коде строки, отвечающие за цикл wordpress. Начинается он здесь:
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
А заканчивается чаще всего таким кодом:
<?php endwhile; else: ?> <p><?php _e('Sorry, no posts matched your criteria.'); ?></p> <?php endif; ?>
В принципе, ничего сложного быть не должно. Дабы закрепить материал предлагаю взглянуть на парочку примеров.
Допустим, что у нас есть задача сделать отдельное оформление для категории постов под номером 3 (цифру ищите в админке блога разделе категорий при наведении на ее заголовок). Для вывода используем все тот же цикл Loop, а для проверки принадлежности к той или иной категории функцию in_category(). Итого получаем:
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <?php if ( in_category('3') ) { ?> <div class="post-cat-three"> <?php } else { ?> <div class="post"> <?php } ?> <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2> … <?php endwhile; else: ?> <p>Sorry, no posts matched your criteria.</p> <?php endif; ?>
Здесь в центре кода есть условие – если пост принадлежит категории под номером 3, то для его оформления применится стиль post-cat-three, в противном случае обычный. Учитывая тот вариант, что код проверки находится в цикле wordpress, мы производим автоматически проверку для всех постов блога.
Исключаем посты из цикла для определенной категории
Собственно теперь рассмотрим пример, с которого все и началось. С помощью функции query_posts мы можем изменить параметры цикла wordpress для вывода постов блога на главной странице. Например, мы хотим исключить из вывода категории 3 и 8, тогда используем код:
<?php query_posts($query_string . '&cat=-3,-8'); ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div class="post"> <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2> <div class="entry"><?php the_content(); ?></div> <p class="postmetadata">Posted in <?php the_category(', '); ?></p> </div> <?php endwhile; else: ?> <p>Sorry, no posts matched your criteria.</p> <?php endif; ?>
Внимание! При этом вы должны убедиться, что используете отдельный файл шаблона для вывода архивов категорий и др., то есть поищите у себя archive.php. В противном случае исключение категорий 3 и 8 будет применено и к архивам, чего мы делать не планировали.
В кодексе для этого есть небольшое решение с помощью функции is_home():
… <?php if ( is_home() ) { query_posts($query_string . '&cat=3,-8'); } ?> …
Пока что на этом все, другие «истории» из кодекс рассмотрю в следующих статьях.
P.S. Постовой. Вы всегда можете бесплатные объявления на нашей Доске DoRus.ru.
Все про отдыху в Крыму – статьи, блоги, фотогалерея, форум, каталог жилья на zagar.net.ua.
Комментариев - 4 к статье “Wordpress цикл (loop) – выводим сообщения блога”
Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!
Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:
- Плагин WPML – мультиязычность и локализация wordpress сайта
- Добавление кнопки Вконтакте, Facebook и Twitter в wordpress блог
- Оригинальные бесплатные шаблоны для Wordpress
- Улучшаем страницу с результатами поиска в wordpress
- Последние сообщения twitter в wordpress блоге
- Плагин jQuery Image Lazy Loader WP – постепенная загрузка изображений
- Отказ от PHP 4 и MySQL 4 для WordPress 3.2
- Добавление ссылок nofollow в blogroll блога
- Сервис keyCaptcha – интерактивная каптча для защиты от спама
- Убираем ненужный текст из атрибута title для ссылок категорий
- Безопасность (2)
- Видео (4)
- Возможности (28)
- Начинающим (11)
- Новости (14)
- Оптимизация (6)
- Плагины (29)
- Сервисы (6)
- Хаки и секреты (22)
- Шаблоны (7)

Категории:
Теги:
Александр, спасибо. Интересует следующий вопрос. Можно ли что-то подобное организовать для каждой страницы тега в wordpress. Т.е. чтобы вверху перед записями по тегу выводилось «приветствие», конечно, оптимизированное под поисковые ключи. Не подскажите?
Полезный пост, но, как ни крути, мне по душе пришелся плагин «simply-exclude» :)
Интересный момент, спасибо. Мне, кстати, тоже нравится плагин «simply-exclude», с ним все проще!
Евгений, конечно можно. Даже придумал способ, создаёте отдельную стр. ну как page.php и после для опред категори выбираете тот шаблон, в котором уже дописано что вам необходимо.
2 способ(нужно знать php получше) можно через функцию вызова, но тоже он смотрит какая категория и к ним загружает то что нужно. (либо из другого файла) p.s. это мой стиль написания ИМХО!
а вообще спс за статью, мб пригодиться.
ведь как я понимаю в 2 строке после цикла, in_category(‘3′) , метсо неё ( не помню метку) можем написать пост (3) либо другой и для него будет свой стиль. Так хорошо оформлять первую запись в блоге. Хотя помню был другой споосбо.
И мой вопрос, как сделать цикл, пример- выводиться 10 записей. нужно ввести 2 класса, 1 к честным нововстям(т.е. 2,4,6,8,10) и к нечетным. как с помощью лупа так сделать? подскажите пожалуйста.
Большое спасибо.