Как отображать Похожие записи по Категории в теме WoodMart?
По умолчанию, премиум-тема WoodMart показывает похожие статьи по тегам. Чтобы похожие статьи работали необходимо для каждой статьи указывать теги. Но, что делать если мы хотим отображать похожие записи по категории?
Эта статься является дополнением для этого видео. Чтобы показать Похожие записи по категории нам необходимо вносить изменения в код файлов темы WoodMart.
Как изменить макет вывода Похожих записей?
Выводятся Похожие записи на странице отдельной записи (файл single.php) с помощью этого кода (44-60):
<?php
if ( woodmart_get_opt( 'blog_related_posts' ) ) {
$args = woodmart_get_related_posts_args( $post->ID );
$query = new WP_Query( $args );
if( function_exists( 'woodmart_generate_posts_slider' ) ) echo woodmart_generate_posts_slider(array(
'title' => esc_html__('Related Posts', 'woodmart'),
'blog_design' => 'carousel',
'blog_carousel_design' => 'masonry',
'el_class' => 'related-posts-slider',
'slides_per_view' => 2
), $query);
}
?>
В этом коде вы можете сменить макет вывода записей и их количество:
‘slides_per_view' => 2 (по умолчанию для просмотра выводится 2 записи)
‘blog_carousel_design' => ‘masonry', (по умолчанию используется макет masonry).
Вы можете использовать др. макеты отображения записей:
- small-images — изображение слева, текст справа;
- mask — на изображении текст;
- default — изображение сверху и на него снизу наезжает немного текст
- masonry — изображение сверху, текст низу
Чтобы вносить в вышеуказанный код свои изменения, рекомендую использовать для этого дочернюю тему. Скопируйте файл single.php в корень папки с дочерней темой и можете его дальше модифицировать. После обновления родительской темы ваши правки останутся без изменений. В этом и заключается преимущество использования дочерней темы.
Как выводить Похожие записи по категории?
Предыдущий код отвечает за вывод похожих записей на странице и их внешний вид. Но, сам запрос в БД (выборка записей) формируется в другой функции (inc/functions.php, строки 790-809):
if( ! function_exists( 'woodmart_get_related_posts_args' ) ) {
function woodmart_get_related_posts_args( $post_id ) {
$taxs = wp_get_post_tags( $post_id );
$args = array();
if ( $taxs ) {
$tax_ids = array();
foreach( $taxs as $individual_tax ) $tax_ids[] = $individual_tax->term_id;
$args = array(
'tag__in' => $tax_ids,
'post__not_in' => array( $post_id ),
'showposts' => 12,
'ignore_sticky_posts' => 1
);
}
return $args;
}
}
Если функция woodmart_get_related_posts_args не переопределена в другом месте (в др. файлах), то она берет в текущей записи теги и по ним выводит другие записи, в которых указаны эти теги. Берется 12 записей и помещается в слайдер, также игнорируются прикрепленные записи.
Мы можем эту функцию переписать, чтобы она выводила записи по текущей категории, а не по тегам.
Для этого открываем файл functions.php, который находится в дочерней теме и вставляем следующий код:
function woodmart_get_related_posts_args( $post_id ) {
$args = array(
'category__in' => wp_get_post_categories( get_queried_object_id() ),
'posts_per_page' => 12,
'orderby' => 'rand',
'post__not_in' => array( get_queried_object_id() )
);
$the_query = new WP_Query( $args );
return $args;
}
Мы переопределили функцию woodmart_get_related_posts_args и ее изменили. Теперь берется 12 случайных записей из этой же категории и выводится в слайдере с похожими записями. При обновлении страницы записи в слайдере будут меняться.
В строке ‘orderby' => ‘rand', можно изменить на date, тогда сортировка будет по дате (самые свежие статьи будут первыми в слайдере). Рекомендую использовать этот вариант.
Чтобы миниатюры записей по высоте ровно отображались в списке необходимо загружать картинки одного размера.