Есть ли лучший способ получить имена категорий для пользовательского типа сообщения в WordPress?
<?php // get the portfolio categories $terms = get_the_terms( $post->ID, 'filters' ); if ( $terms && ! is_wp_error( $terms ) ) : $names = array(); $slugs = array(); foreach ( $terms as $term ) { $names[] = $term->name; $slugs[] = $term->slug; } $name_list = join( " / ", $names ); $slug_list = join( " category-", $slugs ); endif; ?> <!-- BEGIN portfolio-item--> <li class="portfolio-item third column category-<?php echo $slug_list; ?>" data-filter="category-<?php echo $slug_list; ?>">
<?php $taxonomy = 'filters'; $terms = get_terms($taxonomy); if ( $terms && !is_wp_error( $terms ) ) : ?> <ul> <?php foreach ( $terms as $term ) { ?> <li><a href="<?php echo get_term_link($term->slug, $taxonomy); ?>"><?php echo $term->name; ?></a></li> <?php } ?> </ul> <?php endif;?>
Или в fuctions.php поместите это:
function get_the_category_custompost( $id = false, $tcat = 'category' ) { $categories = get_the_terms( $id, $tcat ); if ( ! $categories ) $categories = array(); $categories = array_values( $categories ); foreach ( array_keys( $categories ) as $key ) { _make_cat_compat( $categories[$key] ); } return apply_filters( 'get_the_categories', $categories ); }
и вызовите функцию как:
<?php $cat = get_the_category_custompost($post->ID, 'Your Custom Taxonomy'); ?>
Мой ответ кажется слишком простым, но я использовал его для перечисления категорий из плагина wordpress под названием DW Question Answer, который имеет отдельные категории из стандартных категорий wp.
Я предполагаю, что Design Wall использовала пользовательские типы сообщений для создания q & a part и таксономий для создания категорий.
<ul> <?php wp_list_categories('taxonomy=dwqa-question_category&hide_empty=0&orderby=id&title_li=');?> </ul>
Предполагая, что ваша пользовательская таксономия – это группы рецептов, я реализовал и протестировал этот код в functions.php, и я уверен, что он будет работать и в плагинах.
$recipeTerms = get_terms(array( 'taxonomy' => 'recipegroups', )); foreach($recipeTerms as $recipeTerm){ if($recipeTerm->parent==0){ echo "<div class='termsBox'>"; // remove these div's to suit your needs.. $termLink =get_term_link( $recipeTerm ); echo "<a href='$termLink'><div class='termParent'>".$recipeTerm->name."</div></a> "; $termChilds = get_term_children($recipeTerm->term_id, 'recipegroups' ); foreach($termChilds as $child){ $chTerm = get_term_by( 'id', $child, 'recipegroups'); $termLink =get_term_link( $chTerm ); echo "<a href='$termLink'><div class='top-cat-items'>".$chTerm->name."</div></a>"; } echo "</div>"; // end of termsBox div } }