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

Читать комменты и комментировать

Добавить комментарий / отзыв



Защитный код
Обновить

10 вставок кода для главного цикла WordPress | | 2012-06-19 12:04:28 | | Статьи Web-мастеру | | Главный цикл является самой важной частью сайта под управлением WordPress. Именно он позволяет вам получать записи из базы данных WordPress и выводить их на экран. Обладая набором полезных и простых | РэдЛайн, создание сайта, заказать сайт, разработка сайтов, реклама в Интернете, продвижение, маркетинговые исследования, дизайн студия, веб дизайн, раскрутка сайта, создать сайт компании, сделать сайт, создание сайтов, изготовление сайта, обслуживание сайтов, изготовление сайтов, заказать интернет сайт, создать сайт, изготовить сайт, разработка сайта, web студия, создание веб сайта, поддержка сайта, сайт на заказ, сопровождение сайта, дизайн сайта, сайт под ключ, заказ сайта, реклама сайта, хостинг, регистрация доменов, хабаровск, краснодар, москва, комсомольск |
 
Поделиться с друзьями: