10 вставок кода для главного цикла WordPress
Главный цикл является самой важной частью сайта под управлением WordPress. Именно он позволяет вам получать записи из базы данных WordPress и выводить их на экран. Обладая набором полезных и простых в использовании функций, главный цикл является очень мощным инструментом. В нем вы можете получить единственную запись, или список записей отсортированных по дате создания, заголовку или категории, или список записей, созданных определённым автором, и так далее.
В данном уроке мы рассмотрим 10 вставок кода в главный цикл WordPress, которые помогут сделать сайт еще более мощным.
1. Получаем запись, опубликованную в промежуток между двумя датами
Проблема
Главный цикл и функция WordPress query_posts()
WordPress позволяют легко получить список записей, опубликованных в определённую неделю или месяц. К сожалению, вытащить записи, опубликованные, например, после 17 марта и до 3 мая будет не просто. Решим данную задачу.
Решение
Просто скопируйте ниже приведённый код в вашу тему в то место, где нужно выводить список записей, опубликованных между двумя датами. Обязательно поменяйте даты в коде на те, которые нужны вам.
<?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; ?>
Описание решения
Для решения задачи сначала мы создаем функцию filter_where()
, которая содержит условие SQL “WHERE
”. Затем перед запуском главного цикла функция filter_where()
будет вызываться функцией WordPress post_where()
.
В результате условие “WHERE
”, которое содержится в функции filter_where()
, добавляется в конец запроса SQL, содержащегося в функции post_where()
. Значит, главный цикл вернет только те записи, которые были опубликованы в период между двумя датами, заданными в функции filter_where()
.
2. Используем больше, чем один главный цикл на странице без дублирования записей.
Проблема
Большинство современных тем, а особенно "журнальные" темы, выводят как минимум два главных цикла на главной странице. Данный метод очень полезен, например, для раздела "выделенные записи". Но, если использование двух главных циклов на странице реализуется легко, то предотвратить вывод дублирующихся записей не так просто. Пока вы не знаете о данном методе.
Решение
1. Начнем с первого главного цикла. Ничего сложного: в примере мы просто получаем 8 последних записей с помощью параметра showposts
. Открываем файл index.php и вставляем в него следующий код:
<?php query_posts('showposts=8'); $ids = array(); while (have_posts()) : the_post(); $ids[] = get_the_ID(); the_title(); the_content(); endwhile; ?>
2. Затем наступает время реализовать второй главный цикл. В нем мы получаем все записи, за исключением тех, которые уже выведены в первом цикле:
<?php query_posts(array('post__not_in' => $ids)); while (have_posts()) : the_post(); the_title(); the_content(); endwhile; ?>
3. Сохраняем файл index.php и наслаждаемся результатом.
Описание решения
Первый цикл начинается с очень полезной функции query_posts()
, которая позволяет задавать параметры, используемые в главном цикле. Параметр showposts
дает вам возможность указать количество записей. Непосредственно перед циклом мы создаем массив PHP $ids
, в котором хранятся все ID записей, используемых в цикле.
Как и первый цикл, второй использует функцию query_posts()
с параметром post__not_in
. Данный параметр позволяет вам определить список записей, которые не нужно выводить, в форме массива PHP. Мы передаем массив $ids
в качестве данного параметра. Все записи, полученные в первом цикле, будут пропускаться во втором цикле.
3. Вставляем рекламу после первой записи
Проблема
Реклама является отличным средством монетизации вашего блога. Но для ваших рекламодателей очень важны клики ваших посетителей. Многие блогеры выводят рекламу в боковые панели, нижний или верхний колонтитул, что не всегда является лучшим местом для получения высокого рейтинга нажатий. Чтобы его повысить и сделать вашего рекламодателя счастливым, хорошей идеей будет вставить рекламный блок после первой записи.
Решение
Просто используйте следующий код вместо вашего текущего кода главного цикла. Обязательно вставьте код вашего рекламного блока в строке 6:
<?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; ?>
Описание решения
Переменная целого типа используется в качестве счетчика практически с первых дней появления программирования. Перед главным циклом мы создаем переменную $count
. Данная переменная увеличивается на 1 в каждом проходе цикла.
Затем, добавляем структуру if
(строка 5) и проверяем $count
на равенство 2. Если это так, то первая запись уже выведена, и мы можем добавить рекламный блок.
4. Получаем записи с определенными пользовательскими полями и определенными значениями
Проблема
Благодаря популярности пользовательских полей WordPress очень часто возникает необходимость вывести список записей с определенными пользовательскими полями и определенными значениями в них.
Решение
Все не так сложно, как кажется. Нужно использовать функцию query_posts()
с параметрами meta_key
и meta_value
:
<?php query_posts('meta_key=review_type&meta_value=movie'); ?> <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?>
Описание решения
Значение параметра meta_key
- имя нужного пользовательского поля, а значение meta_value
- нужное значение.
5. Список запланированных записей
Проблема
Благодаря опции планирования, WordPress позволяет составить расписание публикации записей и выводить их в назначенное время. Хорошей идеей является составление списка запланированных записей, чтобы ваши посетители возвращались на ваш сайт или подписывались на фид RSS.
Решение
<?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>Запланированных записей нет.</p> <?php endif; ?>
Описание решения
Для решения используется функция query_posts()
с параметром post_status
. Параметр post_status
позволяет вам получать записи в соответствии с их статусом публикации (“published,” “draft” или, как в нашем примере, “future”). Так как используется параметр showposts=10
, то код вернет только 10 запланированных записей.
6. Выводим записи, опубликованные год назад
Проблема
Часто блоги содержат много интересной информации в старых записях. Но посетители обычно ограничиваются просмотром свежих изменений.
Решение
Если ваш сайт сравнительно "старый", то почему бы не выводить записи, которые были опубликованы год назад? Задача решается просто. Вставляем следующий код в боковую панель или в файл single.php:
<?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; ?>
Описание решения
Сначала получаем текущую дату на строке 2 с помощью функции PHP date()
. Затем получаем год с помощью вызова date('Y')
и вычитаем из него 1, что дает нам прошедший год.
Остается передать переменные $current_day
и $last_year
в параметры day
и year
функции query_posts
.
7. Используем главный цикл для создания шаблона страницы архива
Проблема
Как описывалось в предыдущей вставке кода, посетители часто не могут найти информацию, опубликованную ранее. Для облегчения поиска информации можно создать страницу, которая будет содержать все записи, когда-либо опубликованные в блоге.
Решение
<?php /* Template Name: Архив */ ?> <?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.' записей опубликовано с начала ведения блога'; ?> </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(); ?>
Описание решения
Шаблон страницы создается добавлением в начало файла следующих строк:
<?php /* Template Name: Архив */ ?>
В строке 8 мы создаем счетчик с помощью переменной PHP $numposts
и объекта $wpdb,
который получает результат запроса SQL к базе данных WordPress.
Затем переменная $numposts
выводится для отображения общего количества записей.
В главном цикле используется функция get_posts()
. get_posts()
простое сокращение для создания нескольких главных циклов. Мы получаем все записи из базы данных, и для каждой выводим дату, ссылку и заголовок. Просто и эффективно.
8. Создаем главный цикл с помощью объекта WP_Query
Проблема
Классический цикл WordPress, который используется в большинстве вставок кода в данном уроке, является достаточно удобным в применении. Но при задействовании нескольких главных циклов (например, в сложных “журнальных” темах), возрастает риск сбросов, смещений, неправильных тегов и других ошибок.
Решение
Нужно использовать объект WP_Query
и создать свой собственный цикл:
<?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, запуск нашего собственного главного цикла.
- Строки 6 и 7, выводим информацию из записи (заголовок и ее содержание)
- Строка 8, завершение нашего главного цикла.
Если вы хотите вывести больше или меньше записей, просто поменяйте значение параметра showposts
в строке 3.
9. Выводим последние прилепленные записи
Проблема
Начиная с версии WordPress 2.7, прилепленные записи являются отличным инструментом для блогеров. Очень часто они спрашивают, как включить прилепленные записи в главный цикл.
Решение
Для вывода последних пяти прилепленных записей скопируйте следующий код в файл вашей темы. Если требуется выводить больше записей, то нужно поменять 5 на желаемое число в строке 4.
<?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; ?>
Описание решения
Сначала получаем все прилепленные записи (строка 2). Затем производим их упорядочивание, выводя вверху самые последние, с помощью функции PHP sort()
(строка 3). В строке 4, получаем 5 последних прилепленных записей. Можно изменить число.
Затем используем функцию query_posts()
для управления циклом WordPress. С помощью параметра post__in
мы проверяем факт, что возвращаемые записи содержатся в массиве. Затем мы просто устанавливаем основной цикл и выводим нужную информацию.
10. Создаем цикл изображений
Проблема
В наши дни многие блогеры выводят выдержки из заметок вместе с изображениями на главную страницу. Можно пойти еще дальше и создать оригинальную галерею, в которой будут выводиться изображения для самых последних записей. Можно решить задачу с помощью пользовательских полей. Но есть и более элегантное решение.
Решение
Для создания собственного цикла изображений сначала нужна функция PHP, которая будет вытаскивать первые изображения из каждой заметки, и возвращать их URL. Скопируйте следующий код в ваш файл functions.php. Обязательно установите изображение по умолчанию в строке 10.
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(empty($first_img)){ //Определяем изображение по умолчанию $first_img = "/images/default.jpg"; } return $first_img; }
После сохранения файла можно изменять главный цикл:
<?php if (have_posts()) : while (have_posts()) : the_post(); ?> <a href="/<?php the_permalink();?>" title="<?php the_title(); ?>" class="img-loop"> <img src="http://путь_к_папке_с_изображениями/<?php echo catch_that_image() ?>" alt="<?php the_title(); ?>" /> </a> endwhile; endif; ?>
Описание решения
Первая часть кода является функцией catch_that_image()
, которая включается в файл functions.php. Данная функция разбирает код содержание записи с использованием глобальных переменных $post
и $posts
и регулярных выражений PHP. Если изображения не найдено (то есть, запись не имеет ни одного изображения), возвращается адрес изображения по-умолчанию. Иначе функция возвращает адрес первого изображения в заметке.
Вторая часть кода является главным циклом. В данном цикле не выводится текстовое содержание. Вместо него выводиться первое изображение заметки с помощью функции catch_that_image()
.
Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/aX79VjjsG2A/lessons.php
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2024-11-26 » Капитан грузового судна, или Как начать использовать Docker в своих проектах
- 2024-11-26 » Обеспечение безопасности ваших веб-приложений с помощью PHP OOP и PDO
- 2024-11-22 » Ошибки в Яндекс Вебмастере: как найти и исправить
- 2024-11-22 » Ошибки в Яндекс Вебмастере: как найти и исправить
- 2024-11-15 » Перенос сайта на WordPress с одного домена на другой
- 2024-11-08 » OSPanel 6: быстрый старт
- 2024-11-08 » Как установить PhpMyAdmin в Open Server Panel
- 2024-09-30 » Как быстро запустить Laravel на Windows
- 2024-09-25 » Next.js
- 2024-09-05 » OpenAI рассказал, как запретить ChatGPT использовать содержимое сайта для обучения
- 2024-08-28 » Чек-лист: как увеличить конверсию интернет-магазина на примере спортпита
- 2024-08-01 » WebSocket
- 2024-07-26 » Интеграция с Яндекс Еда
- 2024-07-26 » Интеграция с Эквайринг
- 2024-07-26 » Интеграция с СДЕК
- 2024-07-26 » Интеграция с Битрикс-24
- 2024-07-26 » Интеграция с Travelline
- 2024-07-26 » Интеграция с Iiko
- 2024-07-26 » Интеграция с Delivery Club
- 2024-07-26 » Интеграция с CRM
- 2024-07-26 » Интеграция с 1C-Бухгалтерия
- 2024-07-24 » Что такое сторителлинг: техники и примеры
- 2024-07-17 » Ошибка 404: что это такое и как ее использовать для бизнеса
- 2024-07-03 » Размещайте прайс-листы на FarPost.ru и продавайте товары быстро и выгодно
- 2024-07-01 » Профилирование кода в PHP
- 2024-06-28 » Изучаем ABC/XYZ-анализ: что это такое и какие решения с помощью него принимают
- 2024-06-17 » Зачем вам знать потребности клиента
- 2024-06-11 » Что нового в работе Яндекс Метрики: полный обзор обновления
- 2024-06-11 » Поведенческие факторы ранжирования в Яндексе
- 2024-06-11 » Скорость загрузки сайта: почему это важно и как влияет на ранжирование
Чтобы вырастить плодоносящий сайт - его полезно регулярно поливать и удобрять с помощью рекламы и оптимизации Компания "RedLine" |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.