@ligisayan

Какой шаблон отвечает за вывод всех категорий созданной таксономии и как их вывести на странице?

Всем привет! Создал собственный тип записи products со своей таксономией taxproducts согласно статье.

Когда создается одна категория для всех записей, то все выводится хорошо. Бред начинается, когда категорий уже несколько - все собственные типы записей тогда сваливаются в кучу.
Если в шаблоне taxonomy-taxproducts.php прописываю код ниже, то тогда для отдельных категорий все выводится правильно
<div id="primary" class="content-media">
	<main id="main" class="site-main" role="main">
		<h1><?php single_term_title(); ?></h1>
		<?php
			$cat = get_term_by('name', single_cat_title('',false), 'taxproducts'); $catSlug = $cat->slug; 
			$args = array( 
				'post_type' => 'products', 
				'posts_per_page' => -1, 
                'tax_query' => array(
                    array(
                      'taxonomy' => 'taxproducts',
                      'field' => 'slug',
                      'terms' => $catSlug
                    ),
                ),

			);
			$query = new WP_Query( $args );
			while( $query->have_posts() ) {
			$query->the_post(); 
		?>
		<div class="item">
			<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
			<div><?php the_excerpt(); ?></div>
		</div>
		<?php 
			} wp_reset_postdata();
		?>
	</main>
</div>


Но, возникает вопрос: как вывести все категории созданной таксономии на странице?
Я думал, что за вывод отвечает файл taxonomy-taxproducts.php, но он срабатывает у меня только для отдельной категории.

Все ссылки у меня ЧПУ задаются произвольно вот так /%category%/%postname%/ и каждый раз при изменении заново в этом разделе все сохраняю.

Вычитал, что если ссылки ЧПУ, то обязательно нужно прописывать этот фильтр, чтобы сама таксономия не терялась
// Удаление slug таксономии:
function taxonomy_link( $link, $term, $taxonomy ) {
if ( $taxonomy !== 'taxproducts' )
return $link;
return str_replace( 'taxproducts/', '', $link );
//return str_replace( 'taxproducts/taxproducts/', '', $link );
}
add_filter( 'term_link', 'taxonomy_link', 10, 3 );


Все созданные записи у меня выводятся вот в таком формате: sait/product/name-of-the-post

А страница sait/product выводится пустой
  • Вопрос задан
  • 441 просмотр
Решения вопроса 1
azerphoenix
@azerphoenix
Java Software Engineer
Здравствуйте!

Если в шаблоне taxonomy-taxproducts.php прописываю код ниже, то тогда для отдельных категорий все выводится правильно


Для шаблона taxonomy-taxproducts.php нет необходимости использовать wp_query и т.д.

Достаточно добавить основной цикл и он сам покажет нужные записи для нужной категории соответствующей таксономии
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
       <?php the_title(); ?>
       <?php the_content(); ?>
<?php endwhile; else : ?>
	<p><?php esc_html_e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif; ?>


Все созданные записи у меня выводятся вот в таком формате: sait/product/name-of-the-post


Необязательно добавлять фильтр. Вы можете использовать rewrite в месте, где вы создали таксономию (funcions.php)
//'rewrite'       => array( 'slug' => 'the_genre' ), // свой слаг в URL

https://wp-kama.ru/function/register_taxonomy

Но, возникает вопрос: как вывести все категории созданной таксономии на странице?

Если просто вывести все категории (без записей), то так get_terms() :

<?php 
    $terms = get_terms( array(
        'taxonomy' => 'taxproducts',
    ) );
    echo '<ul class="tax_terms">';
    
    foreach( $terms as $term ) : 
        echo '<li><a href="'.$term->slug.'">'.$term->name.'</a></li>';
    endforeach;

    echo '</ul>';
?>


а если нужно с записями - по структуре: категория 1 и записи 1, категория 2 и записи 2 и т.д.
https://gist.github.com/DevinWalker/6fb2783c05b46a...
используйте 2 цикла - один для получения терминов, а второй для получения записей
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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