Intereting Posts
Хотите сделать CSS, если значение мета-ключа пустое Автоматическое заполнение пользовательского поля для публикации post / update Изменить состояние логотипа на основе URL-адреса Можно ли подключиться к wp_update_core за пределами администратора? Сообщение X of Y в файле single.php / sidebar.php WP Options Query «Переписать правила», взяв 10 секунд после тестирования wp_insert_post () Как определить короткий код плагина WordPress глобально для нескольких пользователей? Загрузка метабокса и пользовательское поле Как разрешить предупреждение: Отсутствует аргумент 2 для ufwp_widget_text () Где фактические данные, хранящиеся в add_post_meta Добавить форму Div в комментарий Как установить значение по умолчанию в мета-окне Какой плагин контактной формы передает фильтры нежелательной почты / спама Outlook? Фильтр рекомендаций по рекламе Woocommerce, основанный на категории CPT Расширение поиска WordPress, чтобы включить выдержки и таксономии?

Идентификатор таксономии верхнего уровня

В верхней части страницы архива продукта я пытаюсь отобразить список категорий продуктов. Правило должно состоять в том, что в списке всегда отображаются прямые дети верхнего уровня.

На WPA есть несколько ответов, которые я пытался реализовать (с моими минимальными навыками), но я чего-то не хватает.

Вот запрос:

<?php $taxonomy = 'product_cat'; $orderby = 'name'; $order = 'DESC'; $show_count = 0; // 1 for yes, 0 for no $pad_counts = 0; // 1 for yes, 0 for no $hierarchical = 1; // 1 for yes, 0 for no $title = ''; $empty = 0; // So now I need to get the top parent id in a variable. I tried these 4 options /* // option 1 $queried_object = get_queried_object(); $term_id = $queried_object->term_id; // option 2 $thisCat = get_category( get_query_var( 'cat' ) ); while ( intval($thisCat->parent) > 0 ) { $thisCat = get_category ( $thisCat->parent ); } $term_id = $thisCat->term_id //option 3 $parent = get_term_by( 'id', $term_id, $taxonomy); while ($parent->parent != 0){ $parent = get_term_by( 'id', $parent->parent, $taxonomy); } //option 4 while ($catid) { $cat = get_category($catid); // get the object for the catid $catid = $cat->category_parent; // assign parent ID (if exists) to $catid // the while loop will continue whilst there is a $catid // when there is no longer a parent $catid will be NULL so we can assign our $catParent $catParent = $cat->cat_ID; } */ // Testing if I have the correct value echo 'The returned variable is:'; print_r($term_id); $args2 = array( 'taxonomy' => $taxonomy, 'child_of' => $term_id, 'orderby' => $orderby, 'order' => $order, 'show_count' => $show_count, 'pad_counts' => $pad_counts, 'hierarchical' => $hierarchical, 'title_li' => $title, 'hide_empty' => $empty ); $sub_cats = get_categories( $args2 ); $args = array( //'type' => 'post', 'orderby' => 'term_group', 'hide_empty' => 0, 'hierarchical' => 0, 'parent' => 0, 'taxonomy' => 'product_cat' ); $test = get_categories( $args ); //print_r($test); $cat_id = get_query_var('cat'); echo $cat_id; if (!empty($sub_cats)) { echo '<ul class="categories">'; foreach($sub_cats as $sub_category) { //echo 'de variabele sub_category'; print_r($sub_category); if ($sub_cats->$sub_category == 0) { $thumbnail_id = get_woocommerce_term_meta( $sub_category->term_id, 'thumbnail_id', true ); $image = wp_get_attachment_url( $thumbnail_id ); $name = $sub_category->name; $slug = $sub_category->slug; echo '<li class="cat-item '.$slug.'"><a href="'. get_term_link($sub_category->slug, 'product_cat') .'"><img src="'.$image.'" " /><span class="txt">'.$name.'</span></a></li>'; } } echo '<li class="cat-item search">'; get_product_search_form(); echo '</li>'; echo '</ul>'; } //endif !empty ?> 

Благодаря! Juri

В общем, чтобы получить сообщения своего типа персонализированного сообщения, вам нужно запросить post_type, если вы хотите только те категории, которые вы могли бы просто потянуть за категории, а не за весь тип сообщения.

 <?php query_posts(array( 'post_type' => 'CustomPostType' )); ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <?php the_category(', '); ?> <?php endwhile; else: ?> <p>Sorry, no matches found.</p> <?php endif; ?> 

Или вы можете использовать get_terms () ?
Быстрый пример:

 $terms = get_terms('CustomPostType'); foreach ( $terms as $term ) { echo $term->name.'<br />'; } 

Вы публикуете что-либо еще на этой странице архива? Если вы, например, публикуете сообщения (или другую информацию) из того же типа сообщений, вы можете его объединить.


EDIT: Прошу прощения, я прочитал комментарии в сценарии и думал, что вам нужна помощь только с остальными. Чтобы просто получить term id вы можете использовать get_terms() (как указано выше). А затем взгляните на следующие параметры:

  orderby (string) id count name - Default slug term_group none order (string) ASC - Default DESC number (integer) The maximum number of terms to return. Default is to return them all. fields (string) all - returns an array of term objects - Default ids - returns an array of integers names - returns an array of strings count - (3.2+) returns the number of terms found id=>parent - returns an associative array where the key is the term id and the value is the parent term id if present or 0 

Не считая других параметров, он будет выглядеть примерно так:

 $CustomPostType_ids = get_terms( 'CustomPostType', array( 'orderby' => 'id', 'order' => 'ASC', 'number' => 1, 'fields' => 'ids' ) ); 

Вы также можете вернуть все значения, а затем просто оттянуть term_id .