10 примеров использования loop в wordpress
Loop это один из самых важных частей кода в блоге wordpress. Фактически, loop это то, что позволяет вам брать инфу из базы данных и переводить её графически на экран. Если знать как правильно использовать loop, можно получить невероятные результаты. Примеров очень много, начиная с получения писем и заканчивая списками категорий и авторов.
В этой статье будут приведены примеры 10-ти вариантов использования loop, которые сделают ваш блог более практичным и интересным.
↓
1. Вывод постов опубликованных между двумя датами.
Проблема
The loop и query_posts () функция WordPress позволяют легко найти список постов опубликованных в определённое время. К сожалению, получить посты между 17 числом марта и 3-м мая не так легко.
Решение
Просто вставьте следующий код там, где хотите показать список постов опубликованный между двумя датами.
Да, и не забудьте поменять мои даты на свои.)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php function filter_where($where = '') { $where .= " AND post_date >= '2009-03-17' AND post_date <= '2009-05-03'"; return $where; } add_filter('posts_where', 'filter_where'); query_posts($query_string); while (have_posts()) : the_post(); the_content(); endwhile; ?> |
2. Использование более одного loop на странице не дублируя посты.
Проблема
Многие современные темы или шаблоны и все темы "magazine" используют по крайней мере два loop на главной странице блога; они могут использоваться, например, для сектора “последних постов” . В то время как возможно использовать два loop, без повторения постов, вот пара таких примеров.
Решение
1.Давайте начнём с первого loop. Трудного тут ничего нет: мы только собираемся взять восемь последних постов, используя параметры показания постов. Откройте index.php , и вставьте код, чтобы вывести ваши "последние" посты:
1 2 3 4 5 6 7 8 9 |
<?php query_posts('showposts=8'); $ids = array(); while (have_posts()) : the_post(); $ids[] = get_the_ID(); the_title(); the_content(); endwhile; ?> |
2.Теперь пришло время применить второй loop и получить все посты, исключая те, которые мы уже вывели в первом loop:
1 2 3 4 5 6 7 |
<?php query_posts(array('post__not_in' => $ids)); while (have_posts()) : the_post(); the_title(); the_content(); endwhile; ?> |
3. Вставка рекламного блока после первого поста.
Проблема
Реклама - хороший способ заработать на своём блоге. Но что получить рекламодателей, реклама должна быть доступна для пользователя. Много блоггеров показывают рекламу в сайдбаре ,в нижнем колонтитуле или в заголовке, эти места не всегда популярны. Чтобы получить больше кликов и соответственно больший доход с рекламы, надо вставлять рекламу после первого поста. Давайте попробуем это реализовать в wordpress с помощью loop.
Решение
Просто используйте следующий loop вместо своего. Не забудьте вставить код рекламы в 6 строчку:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php if (have_posts()) : ?> <?php $count = 0; ?> <?php while (have_posts()) : the_post(); ?> <?php $count++; ?> <?php if ($count == 2) : ?> //вставляйте свой код сюда <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> <?php the_excerpt(); ?> <?php else : ?> <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> <?php the_excerpt(); ?> <?php endif; ?> <?php endwhile; ?> <?php endif; ?> |
4.Получение постов с определёнными значениями и Custom Field.
Проблема
Из-за популярности custom fields в WordPress вы когда нибудь захотите вывести список постов с определенными значениеми и custom fields. В то время как есть простое решение для тех, кто разбирается в WordPress, а у новичков всегда появляются вопросы на эту тему. Так, вот есть правильный и простой способ сделать это.
Решение
Это не трудно ваще. Мы только должны использовать функцию query_posts () с параметрами meta_key и meta_value :
1 2 3 |
<?php query_posts('meta_key=review_type&meta_value=movie'); ?> <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> |
5. Вывод списка будущих постов
Проблема
Благодаря опции “schedule post”, наш любимый wordpress позволяет нам писать посты и помечать их, чтобы они были опубликованы позже. Чтобы удостовериться, что ваши читатели возвращаются к вашему блогу или подписались на RSS, список ваших будущих постов будет хорошим нововведением.
Решение
1 2 3 4 5 6 7 |
<?php query_posts('showposts=10&post_status=future'); ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <h2><?php the_title(); ?></h2> <span class="datetime"><?php the_time('j. F Y'); ?></span></p> <?php endwhile; else: ?><p>No future events scheduled.</p> <?php endif; ?> |
6. Вывод постов, которые были опубликованы год назад.
Проблема
Многие блоги имеют много контента и некоторые из них очень хорошие старые посты, которые не должны быть пропущены. Но большинство посетителей уходят с сайта просмотрев только новые публикации.
Решение
Если ваш блог относительно стар, почему бы не поставить на сайте блок который был выводил посты опубликованные более чем год назад? Сделать этого просто. Только вставьте следующий код в свой сйдбар блога или в single.php :
1 2 3 4 5 6 7 8 9 10 11 |
<?php $current_day = date('j'); $last_year = date('Y')-1; query_posts('day='.$current_day.'&year='.$last_year); if (have_posts()): while (have_posts()) : the_post(); the_title(); the_excerpt(); endwhile; endif; ?> |
7. Использование loop чтобы создать шаблон страницы "Архив".
Проблема
Как отмечено в предыдущем пункте, проблема в блогах состоит в том, что трудно для читателей найти содержание последних постов.
Чтобы помочь своим читателям, найти то, что они ищут, админ создал шаблон страницы WordPress, который отображает список всех постов, которые когда-либо издавались на этом блоге. Вы можете видеть, демку этого кода на WpRecipes.
Решение
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php /* Template Name: Archives */ ?> <?php get_header(); ?> <h2><?php $numposts = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_status = 'publish'"); if (0 < $numposts) $numposts = number_format($numposts); ?> <h2><?php echo $numposts.' recipes published since October 06, 2008'; ?> </h2> <ul id="archive-list"> <?php $myposts = get_posts('numberposts=-1&'); foreach($myposts as $post) : ?> <li><?php the_time('m/d/y') ?>: <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endforeach; ?> </ul> <?php get_sidebar(); ?> <?php get_footer(); ?> |
8. Создание своего собственного loop используя wp_query.
Проблема
Класснический loop WordPress, который чаще всего используется в шаблонах блогов, очень простой и человекопонятен. Но очень часто, особенно используя заказные loop (например, в сложных шаблонах "magazine"), вы рискуете встретиться проблемами сброса, смещения, недопустимыми тэгами и другими ошибками. Как я однажды встретился используя одну из таких тем в своём блоге.
Решение
Решение состоит в том, чтобы использовать wp_query и создать свой собственный loop:
1 2 3 4 5 6 7 8 9 10 |
<?php $myPosts = new WP_Query(); $myPosts->query('showposts=5'); while ($myPosts->have_posts()) : $myPosts->the_post(); ?> the_title(); the_content(); endwhile; ?> |
Пояснение кода
Код отображает пять последних постов. Подробное описание:
Строка 2, создал новый объект WP_Query, назвал $myPosts.
Строка 3, выполнял запрос, используя параметр showposts, чтобы вывести только пять последних постов.
Строка 5, начало loop.
Строка 6 и 7, просто добавляем описание поста (заголовок и сам контент)
Строка 8, конец loop.
Если Вы хотите изменить количество отображаемых постов, просто изменить значение параметра showposts в строке 3.
9. Показывать последние, важные "sticky" посты.
Проблема
Добавленные в WordPress 2.7, важные "sticky" или липкие посты - очень классная особенность нашего всеми любимого движка. Много пользователей WordPress спрашивает, как получить только важные посты в loop.
Решение
Чтобы отобразить пять новых важных постов, только вставьте следующий код где-нибудь в файлы вашей темы. Если Вы хотите изменить количество отображаемых постов, измените 5 на требуемое значение в строке 4:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php $sticky = get_option('sticky_posts'); rsort( $sticky ); $sticky = array_slice( $sticky, 0, 5); query_posts( array( 'post__in' => $sticky, 'caller_get_posts' => 1 ) ); if (have_posts()) : while (have_posts()) : the_post(); the_title(); the_excerpt(); endwhile; endif; ?> |
10. Вывод loop картинок.
Проблема
В настоящее время, большинство блогов посты отображаются вместе с картинками на главной странице. Как насчёт того, чтобы быть более оригинальным и продвинутым с классной страницей "галереи", внося в список фотки из ваших последних постов, и отображая последнее изображение каждого поста? Конечно, мы можем легко это сделать с custom fields; но верьте вы этому или нет, зcustom fields ненужны.
Решение
Чтобы создать наш loop из фотокй, нам сначала нужна функция PHP, которая может захватить первое изображение от каждого поста и вернуть его URL. Чтобы сделать это, вставьте следующую функцию в своем functions.php файле. Не забывайте определить фото по умолчанию в строке 10:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php function catch_that_image() { global $post, $posts; $first_img = ''; ob_start(); ob_end_clean(); $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches); $first_img = $matches [1] [0]; if(emptyempty($first_img)){ //Defines a default image $first_img = "/images/default.jpg"; } return $first_img; } |
После того как сохранили functions.php, можем запускать наш loop.
1 2 3 4 5 6 7 8 9 |
<?php if (have_posts()) : while (have_posts()) : the_post(); ?> <a href="<?php the_permalink();?>" title="<?php the_title(); ?>" class="img-loop"> <img src="http://media2.smashingmagazine.com/wp-content/uploads/images/wordpress-loop-hacks/<?php echo catch_that_image() ?>" alt="<?php the_title(); ?>" /> </a> endwhile; endif; ?> |
Собственно это всё о чём я хотел написать. Удачи в изменениях ваших блогов...)
Можно и легче это сделать
Что именно?
Если вам не трудно пишите подробнее что можно сделать легче, а ещё лучше с примерами или хотя бы с описанием…
Добрый день!
Таких сайтов много ты хоть в интернете смотрел?
открой яндех набери в поиске, и але, всё, что хочешь.
Ты ж таким образом этот и нашел ))
Очень интересный материал! Добавил в закладки!
Спасибо огромное автору! Редкий и полезный материал.
Все пункты, безусловно, очень полезны при продвинутом программировании шаблонов.
Однако, ответа на свой вопрос, я так и не нашел.
Как вывести последние посты в случайном порядке за последние 15 дней?
А никто не знает плагин, чтобы реализовать п.3 из статьи без изменения кода?
Я думаю врядли…. А как????? Все равно нада менять, если ты хоть что нибудь хочешь поменять…. там даже ты не меняшь , а добавляешь и т.д.
Огромное человеческое спасибочки!
Всегда пожалуста!!!)))
2 день думаю над этим… по поводу 2 идеи, разбить луп на 2 части,
вы сами разбирали все выше приведённые примеры?
о черт!! все заработало… но на стандартном шаблоне =\ ладно спасибо за перевод отличная статья
Всегда пожалуста
ёпт, подскажи чего может не хватать? если я вставляю просто в голый index.php нечего больше не подключая, что бы проверить работоспособность?
It is in point of fact a nice and helpful piece of information. I’m satisfied that you simply shared this useful info with us. Please stay us up to date like this. Thanks for sharing.
Неплохо