Перечислите все записи в пользовательском типе записи, но динамически сгруппируйте их по пользовательским таксономиям
У меня есть пользовательский тип записи с именем "Ресурсы", который имеет таксономию с именем "Типы". Я вручную вытаскиваю каждый термин, что не является самым элегантным решением, и каждый раз, когда добавляется новый термин, я должен добавлять его вручную.
Мне нужен способ заполнения Терминов соответствующими записями, перечисленными ниже. У меня есть пользовательский цикл для отображения каждого сообщения (ввод пользовательских полей), поэтому мне нужно контролировать, что отображается для каждого пост.
Есть ли простой способ сделать это? Спасибо.
2 answers
Попробуйте этот фрагмент кода для шаблона страницы. Я использовал его в одном из своих проектов. Он выводит термин таксономии один за другим со списком всех сообщений с этим термином. (Просто замените YOUR_TAXONOMY_SLUG на ваш)
<div id="content">
<h2 class="entry-title"><?php the_title(); ?></h2>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
$mytaxonomy = get_terms('YOUR_TAXONOMY_SLUG', array("fields" => "names"));
<?php for ( $myterm = 0; $myterm < count($mytaxonomy); $myterm++) { ?>
<h3><?php echo $mytaxonomy[$myterm]; ?>:</h3>
<ul class="taxonomy_group">
<?php $loop = new WP_Query(array('YOUR_TAXONOMY_SLUG' => $mytaxonomy[$myterm]));
while ( $loop->have_posts() ) : $loop->the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title();?></a></li>
<?php endwhile; ?>
</ul>
<?php } ?>
</div><!-- #post-## -->
</div><!-- #content -->
Обратите внимание, что этот цикл будет работать только в том случае, если категория состоит из одного слова. Для WP_Query требуется категория SLUG в цикле. Если название категории состоит из двух или более слов, разделенных неразрывным пробелом, оно не будет работать (я могу это проверить, потому что только что попробовал). Я все еще не нашел способа извлечь слизняка из данного термина таксономии, но я работаю над этим.
ДОБАВЛЕНИЕ: Думаю, я нашел способ обойти проблему с названием термина из нескольких слов. Кажется, это работает в моем код.
<div id="content">
<h2 class="entry-title"><?php the_title(); ?></h2>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<?php $terms = get_terms('YOUR_TAXONOMY_SLUG');
$count = count($terms); ?>
<?php if ($count > 0) {
foreach ( $terms as $term) { ?>
<h3><?php echo $term->name; ?></h3>
<ul class="taxonomy_group">
<?php $loop = new WP_Query(array('YOUR_TAXONOMY_SLUG' => $term->slug));
while ( $loop->have_posts() ) : $loop->the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title();?></a></li>
<?php endwhile; ?>
</ul>
<?php }
} ?>
</div><!-- #post-## -->
</div><!-- #content -->
Дайте мне знать, если это сработает для кого-то еще или они увидят в этом какие-либо дыры.