@css0101
дизайнер, немного 3д, мечтаю сделать свою игру

Carbon Fields. Что исправить в коде для виджета постов из рубрики с выводом данных из многослойных association?

Здравствуйте. Есть посты формата 'chat' – это адреса. (сайт не нуждается в использовании форматов записей по назначению, поэтому я привязалась к ним, чтоб не плодить сущности) У адресов есть несколько простых полей CF. Есть записи формата "aside" – это ивенты. В ивентах есть поле complex, в котором есть поле association. Через последнее выбирается адрес. И из этого мне нужно сделать афишу – виджет, в котором будут выводиться активные ивенты из указанной через поле assotiation категории.
Код для адресов
// Создание кастомных полей
add_action( 'carbon_fields_register_fields', 'venue_attach_post_meta' );
function venue_attach_post_meta() {
Container::make( 'post_meta', 'venue_post_options', 'Опции локации' )
->where('post_format', '=', 'chat')
->add_fields( array(
	Field::make( 'text', 'venue_adress', 'Адрес' ),
) );}

// Вывод
if ( has_post_format('chat') )  { 
echo carbon_get_the_post_meta('venue_adress');
}
Код для ивентов
// Создание кастомных полей
add_action( 'carbon_fields_register_fields', 'event_attach_post_meta' );
function event_attach_post_meta() {
Container::make( 'post_meta', 'event_post_options', 'Опции спектакля' )
->where('post_format', '=', 'aside')
->add_fields( array(
	Field::make( 'complex', 'event_options', 'Установки времени, даты и адреса' )
		->add_fields( array(
			Field::make('text', 'event_date', 'Дата')
			->set_width( 33 ),
			Field::make('text', 'event_time', 'Время')
			->set_width( 33 ),
			Field::make('association', 'event_adress')
			->set_types( array(
				array(
				'type' => 'post',
				'post_format' => 'chat',
				),
			))
			->set_max(1)
		) )
) );}

// Вывод (огромная благодарность Антону Вакуленко за помощь с кодом)
<?php if ( has_post_format('aside') ){
$places = carbon_get_post_meta( $post->ID, 'event_options' );
if ( $places ) {
foreach ( $places as $place ) {
echo $place['event_date'];
echo $place['event_time'];
$address = $place['event_adress'];
foreach ( $address as $item ) {
echo get_permalink($item['id']);
echo get_the_title($place['id']);
echo carbon_get_post_meta($item['id'], 'venue_adress');
}
}	
}
}


И, собственно, виджет, с которым у меня не получается:
function load_widgets() {
class OutPostsWidget extends Widget {
protected $form_options = array( 'width' => 500 );
	function __construct() {
		$this->setup( 'outposts_widget', 'Вывод постов из рубрик', 'Blah-blah', array(
			Field::make( 'text', 'outposts_title', 'Заголовок' )->set_default_value( '') ,
			Field::make( 'association', 'outposts_select' )
			->set_types( array(
				array( 'type' => 'term', 'taxonomy' => 'category', ),
			) )
		) );
	}

// Called when rendering the widget in the front-end
function front_end( $args, $instance ) {
	echo $args['before_title'] . $instance['outposts_title'] . $args['after_title'];
	$cats  = $instance['outposts_select'];
	if ( $cats ) {
		foreach ( $cats as $cat ) {
// До этого момента код работает правильно
		foreach ( $cat as $posts ) {
// Отсюда начинается моя ошибка, которую я не знаю как исправить 
var_dump( $posts );
			echo '<p> Test Text ' . get_the_title($posts['id']) . '</p>'; // Это выводится несколько раз, по разу для каждого слоя иерархии, естественно, с пустотой, вместо title, запись выводится только одна – самая последняя.
		}			
		}
	}
}
	}

register_widget( 'OutPostsWidget' );
}

Дамп
string(16) "term:category:10"

Test Text
string(4) "term"

Test Text
string(8) "category"

Test Text
int(10)

Test Text Заголовок записи
Я понимаю, что на поределённом этапе, мне нужно выполнить считывание данных записей из имеющейся категории, отсекая данные предков. Но я не понимаю, как это сделать. Помогите, пожалуйста!
  • Вопрос задан
  • 153 просмотра
Пригласить эксперта
Ответы на вопрос 1
@css0101 Автор вопроса
дизайнер, немного 3д, мечтаю сделать свою игру
Бросила я эту затею. Слишком сложно для меня. Но придумала другое решение – вывод кода в виджете с поддержкой php. Но и с ним проблемы. Суть проблемы тут, если кому интересно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы