Здравствуйте. Есть посты формата '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 Заголовок записи
Я понимаю, что на поределённом этапе, мне нужно выполнить считывание данных записей из имеющейся категории, отсекая данные предков. Но я не понимаю, как это сделать. Помогите, пожалуйста!