WordPress. Похожие публикации (без плагина)

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

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

Получим следующее:

WordPress. Похожие публикации (без плагина)

Для реализации нужно знание программирования на PHP и CSS. Запрограммируем так, чтобы не было всех бесилок, которые присутствуют в плагинах этой тематики:

  • Не будет js/jq скриптов. Ведь для блока из нескольких ссылок они и не нужны!
  • Не будет обращений через jq/ajax в административную часть сайта (как у некоторых плагинов)
  • Не будет назойливой рекламы и требований доната в административном интерфейса. У нашего программного кода не будет интерфейса в административной части вообще. Это плюс — админка будет работать быстрее.
  • Не будет маркетинговой ловушки, которая собирает данные о пользователях и отсылает сторонним компаниям.

В конечном итоге хотим:

  • Получить блок ссылок в виде плитки, в несколько рядов (4 в ряд, 2 рада).
  • В каждой плитке будет уменьшенное (ресайзнутое) фото публикации и название.
  • Сделаем так, чтобы кликабельными были не только названия, но и картинка. Добавим осветление блока при наведении курсора.
  • Будут выводиться ссылки на публикации в том же разделе (не с теми же тегами).
  • Статьи будут выбираться в случайном порядке. В выводе не должно быть текущей статьи.
  • Весь блок будет появляться, только если есть хотя бы одна «похожая» статья.
  • Подбор «похожих» статей ведётся из всех рубрик, к которых находится текущая статья.

Я не программист для WordPress. Поэтому собирал куски кода по интернету. Из-за этого решил пожертвовать одной необходимой функцией — кешированием результата. Но это не проблема, ведь у меня работает WP Super Cache, и скомпилированные однажды страницы выдаются через nginx, как статичные html. Если на сайте вообще нет средств кеширования страницы, то в блоке «похожие» публикации будут непрерывно выводиться новые результаты. Это будет замедлять сайт.

Я не верстальщик, поэтому прошу не кидать помидоры, как только увидите блочные элементы внутри строчных. Сделал так, чтобы работало. О правильности не думал. Каюсь.

Программируем html/php

Открываем файл детального просмотра публикации «single.php» (он находится в папке с темой) и добавляем после блока со статьёй следующий html/php код:

<?php

$categories = get_the_category($post->ID);

if (count($categories)) {

$categoryIds = array();

foreach($categories as $individual_category) {

$categoryIds[] = $individual_category->term_id;

}

$args = array(

‘category__in’ => $categoryIds,

‘post__not_in’ => array($post->ID),

‘showposts’=>8,

‘orderby’=>’rand’,

‘caller_get_posts’=>1

);

$my_query = new wp_query($args);

if( $my_query->have_posts() ) {?>

<div class=»rpost»>

<h3>Похожие публикации</h3>

<div class=»rpost-list»>

<?php

while ($my_query->have_posts()) {

$my_query->the_post();

?><div class=»rpost-el»><div class=»rpost-in»><a href=»<?php the_permalink();?>» title=»<?php the_title();?>»><div class=»img» style=»background-image:url(‘<?php the_post_thumbnail_url(array( 150,150 ));?>’);»></div><?php the_title();?></a></div></div><?php

}?>

</div>

</div>

<?php

}

wp_reset_query();

}?>

Сохраняем файл и проверяем результат в публичной части сайта.

Облагораживаем CSS

Сделаем вывод результата красивым. Открываем CSS файл темы и добавляем в конец:

.rpost {

overflow: hidden;

width: 100%;

display: block;

float: left;

clear: both;

}

.rpost h3{

clear: both;

display: block;

margin-bottom: 15px;

text-transform: none;

font-size: 20px;

color: #1a1a1a;

}

.rpost .rpost-list{width: 100%;}

.rpost .rpost-el{

width: 25%;

min-height: 220px;

display: inline-block;

float: left;

line-height: 1.5;

font-size: 14px;

}

.rpost .rpost-el a{

display: inline-block;

width: 100%;

}

.rpost .rpost-el a:hover{opacity: 0.7;}

.rpost .rpost-in{padding: 0 5px;}

.rpost .img{

background: 50% 50% no-repeat;

max-width: 100%;

height: 100px;

margin-bottom: 15px;

background-size: cover !important;

}

Сохраняем файл и проверяем результат в публичной части. Перезагружаем страницу через Ctrl+F5, чтобы кеш браузера сбросился и подгрузился изменённый CSS файл.

Параметры

Как можно догадаться из строчки скрипта:

‘showposts’=>8,

— он выдаёт ровно 8 публикаций. Можно поменять на любое число кратное 4 (в строке 4 элемента).



2018-03-28T12:08:16
Веб сайты