Как связать типы записей и вывести их в виджете Elementor Posts

Как связать типы записей и вывести их в виджете Elementor Posts

Данная задача встала передо мной не сразу целиком, а по частям. Сначала я искал способ как выводить записи (архив) с помощью произвольного шаблона, поскольку встроенный шаблон виджетов Posts и Portfolio не устраивал.

Вывод записей в произвольном виде

Например виджет Posts имеет конкретную задачу: выводить список постов. А если нам нужно вывести не список постов, а пользовательские типы? Например квартиры. Нам же захочется в списке квартир показать какие-то характерные подробности, например площадь, количество комнат и т.д.

Серьезной находкой для меня стал плагин Ele Custom Skin, с виду простенький, но невероятно крутой. Именно он решает эту задачу. Создаем шаблон в разделе Loop, потом при создании страницы добавляем виджет Posts, а там во вкладке «Макет» выбираем в списке «Обложка» пункт «Custom».

Выбор макета списка записей

После того, как мы выберем «Custom», то у нас появится ещё один список. Это будет список шаблонов.

Список шаблонов для вывода записей

Выбираем нужный шаблон и теперь список записей отображается в том виде, в котором мы захотим.

Связанные типы записей

Теперь представим что у нас есть задача чуть сложнее. Мы можем вывести список записей в любом виде, а как вывести связанные записи?

Допустим у нас есть два типа записей «Специалисты» и «Отзывы». У каждого специалиста своя страница, на которой должны отображаться отзывы, которые добавлены для этого конкретного специалиста. Тут мы имеем уже, грубо говоря, вложенность.

С этой задачей нам поможет справится плагин «Advanced Custom Fields». С помощью этого плагина мы добавим к отзывам поле типа «Объект записи».

Настройка поля «Объект записи»

В поле «Фильтрация по типу записи» выбираем нужный тип записи. В нашем случае выбрать нужно «Специалисты». Возвращаемый формат выбираем ID записи. Таким образом при добавлении отзыва мы будем выбирать специалиста, для которого добавляется отзыв.

Теперь нам нужно на странице шаблона «Специалисты» добавить виджет Posts, там во вкладке

Теперь нам нужно на странице шаблона «Специалисты» добавить виджет Posts, там во вкладке

Теперь нам нужно на странице шаблона «Специалисты» добавить виджет Posts, там во вкладке «Запрос» выбираем тип записи «Отзывы», а в строке «ID запроса» указываем нужный нам ID. Пусть это будет «get_testimonials».

Теперь нам нужно добавить хук, который будет модифицировать наш запрос в зависимости от того, страницу какого специалиста просматривает пользователь. Для этого нужно добавить небольшой PHP-код.

add_action( 'elementor/query/get_testimonials', function( $query ) {
	global $post;
	$meta_query = $query->get( 'meta_query' );
	if ( ! is_array( $meta_query ) ) {
		$meta_query = array();	
	}

	$meta_query[] = array(
		'key' => 'специалист',//идентификатор поля ACF
		'value' => $post->ID
	);
	$query->set( 'meta_query', $meta_query );
});

Вот и все. Теперь к запросу будет добавляться уточнение в виде идентификатора записи специалиста и запрос вернет отзывы именно для этого специалиста.

Мне это решение кажется вполне изящным и довольно удобным.

На сайте отсутствует реклама

Автор не получает прямой выгоды. Если считаете что материал полезен, поддержите проект

Номер карты

Заранее спасибо!

Бидюков Денис

Эксперт по сайтам

Занимаюсь продвижением личного бренда с помощью сайта и SEO. Если Вы хотите из обычного сантехника, электрика, врача или фотографа стать востребованным и высокооплачиваемым  специалистом, то я с легкостью Вам помогу.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *