@akf_13rm

Как вывести произвольный тип записи в зависимости от принадлежащей ему таксономии?

Здравствуйте!
Занимаюсь натяжкой верстки на Wordpress и столкнулся с задачей, которую не знаю как решить:
Создал custom_post_type (programs) и таксономию (genretax). Теперь хочу вывести на странице archive-programs.php записи в зависимости от указаной для них таксономии. Как на скриншоте:
614db0040426f811333080.png
В верстке используется библиотека MixItUp 3 (для вильтра плиток) https://www.kunkalabs.com/mixitup/
У меня сейчас выводятся так:
614db117c6965201209961.png
Тоесть посты привязаны к таксономии правильно, но сами таксономии дублируются..
Помогите пожалуйста, уже 3 день вожусь и никак не получается.
Код таксономии:
register_taxonomy( 'genretax', [ 'programs', 'regions' ], [
	'label'                 => '',
	'labels'                => [
		'name'              => 'Регионы активности',
		'singular_name'     => 'Регион активности',
		'search_items'      => 'Поиск регионов активности',
		'all_items'         => 'Все Регионы активности',
		'view_item '        => 'Просмотр Региона активности',
		'parent_item'       => 'Parent Регионы активности',
		'parent_item_colon' => 'Parent Регионы активности:',
		'edit_item'         => 'Изменить Регионы активности',
		'update_item'       => 'Обновить Регионы активности',
		'add_new_item'      => 'Добавить новый регион активности',
		'new_item_name'     => 'New Регионы активности Name',
		'menu_name'         => 'Регионы активности',
	],
	'description'           => '',
	'public'                => true,
	'publicly_queryable'    => true,
	'show_ui'               => true,
	'hierarchical'          => true,

	'rewrite'               => true,
	'capabilities'          => array(),
	'meta_box_cb'           => null,
	'show_admin_column'     => false,
	'show_in_rest'          => true,
	'rest_base'             => null,
] );


Код custom_post_type:
register_post_type( 'programs',
		array(
			'labels'      => array(
				'name'          => esc_html__( 'Программы', ),
				'singular_name' => __( 'Программы' ),
			),
			'public'      => true,
			'has_archive' => true,
			'menu_icon'   => 'dashicons-admin-site',
			'supports'    => array( 'title', 'editor', 'thumbnail' ),
			'show_in_rest' => true,
			'taxonomies'          => array('genretax' ),
		)
	);


Код вывода таксономии:
<?php
				$args = array(
					'post_type' => 'programs',
				);
				$query = new WP_Query( $args );

				if ($query->have_posts()) {

					while ( $query->have_posts() ) : $query->the_post();
						$page_categories = get_the_terms( get_the_ID(), 'genretax' );
						if ( $page_categories && ! is_wp_error( $page_categories ) ) {

							foreach ( $page_categories as $page_category ) {

								?>
                                <li class="filter" data-filter=".category<?php the_ID(); ?>">
                                    <i>
                                        <img src="<?php echo carbon_get_term_meta($page_category->term_id, 'crb_thumb'); ?>" alt="">
                                    </i>
                                    <?php	echo $page_category->name; ?>
                                </li>

								<?php
							}
						}
					?>
					<?php endwhile;
				}
				wp_reset_postdata();

				?>


Код вывода постов:
<?php
				$args = array(
					'post_type' => 'programs',
				);
				$query = new WP_Query( $args );

				if ($query->have_posts()) {

					while ( $query->have_posts() ) : $query->the_post(); ?>

                        <li class="mix category<?php the_ID(); ?>">
                            <a href="<?php the_permalink(); ?>" class="img_col_item_programs">
	                            <?php echo get_the_post_thumbnail(get_the_ID()); ?>
                            </a>
                            <a href="<?php the_permalink(); ?>" class="link_col_item_programs"><?php the_title(); ?></a>
                        </li>

						<?php

					 endwhile;

				}
				wp_reset_postdata(); ?>
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
vladchv
@vladchv
WordPress Developer
Вы получаете все категории для всех постов... Нужно просто вызвать все категории:

<?php $terms = get_terms('genretax');
foreach($terms as $term){ ?>
   <li class="filter" data-filter=".category<?php echo $term->term_id; ?>"><?php echo $term->name; ?></li>
<?php } ?>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
16 апр. 2024, в 14:20
500 руб./за проект
16 апр. 2024, в 14:03
5000 руб./за проект
16 апр. 2024, в 13:17
5000 руб./за проект