Как сделать свою выборку постов в WordPress

Рубрика: Разработка сайтов
Метки: |
Вторник, 18 ноября 2008 г.
Просмотров: 5860
Подписаться на комментарии по RSS
]]>
]]>

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

Однако этот способ не всегда подходит, и разработчику приходится формировать свой SQL-запрос к базе данных WP, чтобы выбрать нужные посты. В частности, это требуется в том случае, если при создании постов используются поля, определяемые пользователем (custom fields), и их потом как-то надо использовать в выборке (например, предоставить возможность поиска по этим полям или использовать их как некие признаки, наряду с категориями).

В том же кодексе WP есть подробная статья, рассказывающая, как создать и использовать свой запрос к базе. Я расскажу об этом коротко:

1. Создаем в нашей теме шаблон, назовем его, например, searhpage.php. В верхней части кода страницы нужно прописать примерно следующее:

<php
/*
Template Name: Search Page
*/
?>

2. Создаем в админке WP страницу (page) и называем ее, скажем, Поиск. В самом низу формы создания страницы есть подраздел "Шаблон страницы" (Page Template), там в выпадающем списке, если мы все правильно сделали на шаге 1, должен быть выбор из двух вариантов "Базовый шаблон" и "Search Page" (в точности тот текст, который мы внесли в комментарий). Выбираем Search Page и создаем страницу. Запоминаем ее адрес (slug), теперь ссылку на страницу можно вставить в любом месте навигации (в шаблоне или в постах).

3. Где-то в верхней части страницы searchpage.php формируем наш запрос. Приведу пример из кодекса:

 <?php
 $querystr = "
    SELECT wposts.* 
    FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
    WHERE wposts.ID = wpostmeta.post_id 
    AND wpostmeta.meta_key = 'tag' 
    AND wpostmeta.meta_value = 'email' 
    AND wposts.post_status = 'publish' 
    AND wposts.post_type = 'post' 
    ORDER BY wposts.post_date DESC
 ";
 $pageposts = $wpdb->get_results($querystr, OBJECT);
 
 ?>

4. А там, где должен находиться основной Цикл (Loop), вставляем следующие строчки:

 <?php if ($pageposts): ?>
 <?php foreach ($pageposts as $post): ?>
 <?php setup_postdata($post); ?>

И это все. Теперь можно в Цикле использовать все обычные теги для отображения информации о посте. Например, вы можете спокойно задействовать необходимый фрагмент вывода из другого файла-шаблона вашей темы.

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

Оставьте комментарий!

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

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



(обязательно)