Вручную устанавливаем в админке посты, которые хотим вывести
Делаем через произвольные поля.
Для этого нам нужно зайти на страницу редактирования поста и указать там посты, которые мы добавим в «Похожие записи».
Как это делается, показано на скриншоте:
- В качестве названия произвольного поля можете использовать любое, которое ещё не было задействовано на вашем сайте (какие были задействованы, можно узнать, нажав на выпадающий список —Выбрать—). Как видно по скриншоту, я использовал
my_related_posts
. - Значением произвольного поля будет перечисление ID-ов похожих постов через запятую (без пробелов). Чтобы узнать ID поста, просто перейдите на его страницу редактирования и посмотрите на URL.
- Если у вас нет такого блока с произвольными полями, в правом верхнем углу откройте вкладку «Настройки экрана» и напротив «Произвольные поля» поставьте галочку.
Вы также можете не использовать стандартный не очень удобный метабокс произвольных полей, а создать свой собственный (допустим с выпадающим списком названий постов, так как задавать их по ID не очень и удобно).
Это все хорошо, но чтобы код ратал нужно настроить вывод релевантных постов
Итак, сразу код, вставляем туда, где хотим вывести похожие посты:
/ проверяем, заданы ли похожие посты в админке if( $my_related_post_ids = get_post_meta($post->ID, 'my_related_posts', true)) : $related_args = array( 'posts_per_page' => -1, // сколько постов будет указано в админке, столько и выведется 'post__in'=> explode(',', $my_related_post_ids), // в качестве значения нужно будет передать массив 'orderby' => 'post__in' // посты будут сортироваться в том же порядке, в котором они перечислены в админке ); $bzk_query = new WP_Query( $related_args ); // если посты, удовлетворяющие нашим условиям, найдены if( $bzk_query->have_posts() ) : // выводим заголовок блока похожих постов echo '<h3>Похожие посты</h3>'; // запускаем цикл while( $bzk_query->have_posts() ) : $bzk_query->the_post(); // в данном случае посты выводятся просто в виде ссылок echo '<a href="' . get_permalink( $bzk_query->post->ID ) . '">' . $bzk_query->post->post_title . '</a>'; endwhile; endif; // не забудьте про эту функцию, её отсутствие может повлиять на другие циклы на странице wp_reset_postdata(); endif;
В этом случае будет выводиться просто ссылка.
Чтобы вывести красиво с миниатюрой записи и форматированием, я создала новый шаблон content1
// проверяем, заданы ли похожие посты в админке if( $my_related_post_ids = get_post_meta($post->ID, 'my_related_posts', true)) : $related_args = array( 'posts_per_page' => -1, // сколько постов будет указано в админке, столько и выведется 'post__in'=> explode(',', $my_related_post_ids), // в качестве значения нужно будет передать массив 'orderby' => 'post__in' // посты будут сортироваться в том же порядке, в котором они перечислены в админке ); $bzk_query = new WP_Query( $related_args ); // если посты, удовлетворяющие нашим условиям, найдены if( $bzk_query->have_posts() ) : // выводим заголовок блока похожих постов echo '<h3>Рекомендуемые статьи</h3>'; // запускаем цикл while( $bzk_query->have_posts() ) : $bzk_query->the_post(); // в данном случае посты выводятся по шаблону echo '<a href="' . get_template_part( 'content1','') . '">' . '</a>'; endwhile; endif; // не забудьте про эту функцию, её отсутствие может повлиять на другие циклы на странице wp_reset_postdata(); endif;
Смотрите Live demo под постом 🙂