Создание раздела «Лучшие публикации» в WordPress

WordPress – чрезвычайно мощная CMS. Её мощь заключается, прежде всего, в широких возможностях настройки. Изменить дизайн вашего сайта или добавить новую функцию – дело нескольких минут.

WordPress позволяет настроить особю область сайта – область виджетов – для отображения категорий, разделов или хронологии постов. Но как быть, если вы хотите отобразить в виде виджета произвольный пост?

На многих сайтах такая функция доступна под названием «Лучшие посты» («Featured Posts»). В базовой поставке WordPress этой функции нет, но она легко может быть создана.

Эта статья посвящена созданию функции «Лучшие посты» при помощи средств, имеющихся в стандартной инсталляции WordPress.

По ходу дела мы сосредоточимся на реализации самой функции, поэтому не сможем уделить слишком много внимания дизайну. Позже вы сможете отредактировать CSS-файлы так, чтобы секция «Лучшие посты» наилучшим образом вписалась в дизайн вашего сайта.

Исходные требования

  • инсталляция WordPress;
  • начальные знания PHP;
  • умение ориентироваться в документации;
  • немного свободного времени.

Предполагаемый результат

Предполагаемый результат

Загрузить все файлы, используемые в статье, вы можете здесь.

Приступим

Чтобы не заморачиваться дизайном, мы будем использовать тему-пустышку Test-theme, состоящую из базового набора шаблонов, показывающих нужный контент без намёка на оформление. Вы можете загрузить эту тему отсюда либо использовать любую другую тему.

Этапы работы

  • добавление метабокса на страницу редактирования публикации;
  • сохранение данных метабокса;
  • отображение «лучших постов» на главной странице.

Этап 1. Создание метабокса

Откройте файл functions.php и добавьте в него функцию, регистрирующую метабокс. Эта функция отобразит флажок опции на странице редактора публикации:

function add_featured_meta_box($post){
$featured = get_post_meta($post->ID, '_featured-post', true);
echo "<label for='_featured-post'>".__('Feature this post?', 'foobar')."</label>";
echo "<input type='checkbox' name='featured-post' id='featured-post' value='1' ".checked(1, $featured)." />";
}

Когда администратор захочет поместить ссылку на пост в секцию «Лучшие посты», он просто установит этот флажок:

администратор захочет поместить ссылку

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

Этап 2. Сохранение данных метабокса

Снова откроем файл functions.php и создадим следующую функцию:

function save_featured_meta($post_id){
// Do validation here for post_type, nonces, autosave, etc...
if (isset($_REQUEST['featured-post']))
update_post_meta(esc_attr($post_id), '_featured-post', esc_attr($_REQUEST['featured-post']));
// I like using _ before my custom fields, so they are only editable within my form rather than the normal custom fields UI
}
add_action('save_post', 'save_featured_meta');

Эта функция проверяет, был ли установлен флажок, и соответственно обновляет информацию в базе данных при помощи функции update_post_meta(). Эта функция отвечает за сохранение информации в пользовательских полях базы данных WordPress.

Пользовательские поля добавляются в базу данных по мере необходимости. Поэтому наша функция первым делом проверяет, существует ли соответствующее пользовательское поле. Если нет, поле добавляется при помощи вызова функции add_post_meta().

Этап 3. Отображение секции «Лучшие посты»

Чтобы отобразить данные на главной странице, мы должны модифицировать файлы нашей темы. Скопируйте разметку и код, приведённые ниже, и вставьте их туда, где вы хотите отобразить секцию «Лучшие посты»:

<h2>Featured Posts</h2>
<?php
  $args = array(
        'posts_per_page' => 5,
        'meta_key' => '_featured-post',
        'meta_value' => 1
    );
    $featured = new WP_Query($args);

if ($featured->have_posts()): while($featured->have_posts()): $featured->the_post(); ?>
<h3><a href="<?php the_permalink(); ?>"> <?php the_title(); ?></a></h3>
<p class="details">By <a href="<?php the_author_posts() ?>"><?php the_author(); ?> </a> / On <?php echo get_the_date('F j, Y'); ?> / In <?php the_category(', '); ?></p>
<?php if (has_post_thumbnail()) : ?>

<figure> <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('', array('class' => 'box')); ?></a> </figure>
<p ><?php the_excerpt();?></p>
<?php
endif;
endwhile; else:
endif;
?>

Этот код создаёт массив, который будет содержать в себе список «лучших» постов. Затем этот массив заполняется из базы данных при помощи функции WP_Query(). В конце концов, ссылки на посты, их заголовки, автор и другие подробности отображаются в цикле в нужном месте страницы.

Если теперь вы откроете главную страницу вашего сайта, то результат будет выглядеть примерно так:

результат будет выглядеть примерно так

Заключение

Поздравляю! Вы только что создали полезное дополнение для вашего сайта и изучили некоторые методы настройки WordPress на реальном примере. Разумеется, если вы не удовлетворены результатом или считаете все эти манипуляции слишком сложными, вы всегда можете воспользоваться готовым плагином вроде TSP Featured Posts или Featured Posts Widget.

Надеюсь, эта статья была для вас полезной. Вы можете поделиться своими рецептами создания раздела «Лучшие посты» в комментариях.

Перевод статьи «Light Your Posts: How to Create Featured Posts Section in WordPress» был подготовлен дружной командой проекта Сайтостроение от А до Я.