Intereting Posts
Изменение URL – проверьте, существует ли почта до 404 Продать любое изображение из пользовательского типа отправки Обновление meta_value в настраиваемом ключе Могу ли я создать таблицу на моей БД без создания плагина? Построение индексной страницы из настраиваемых полей Как установить параметры экрана по умолчанию? Как использовать, когда файл находится в другой папке? WordPress добавляет br между моим shortcode Загрузить файл Force из пользовательского меню? Как изменить порядок пользовательских таксономий в правой части страницы редактирования пользовательских сообщений? Авторы могут настраивать свои авторские страницы? Создайте дополнительную иерархическую глубину категории для настраиваемого плагина типа публикации / таксономии (виджет) Как открыть рамку редактора вложений в медиатеке WordPress? Как изменить код категорий категорий? Query_posts с настраиваемым полем meta value

Фильтр get_categories () для таксономии в WordPress

Я хочу показать категорию только в том случае, если (эта должность) находится в этой категории AND region = $ name для этой записи.

Так, например, у меня есть пользовательский пост (тип «бизнес») под названием «Mamma Mia» в детской категории: «пиццерии» (и в родительской категории «еда»), а в регионе «Роттердам» (обычная таксономия: «регион », пользовательский термин таксономии:« rotterdam »).

=> категория отображения «пиццерии» (и «пищевая» категория родительской категории)

Только, я понятия не имею, как это сделать. Я был бы признателен за любую помощь в этой загадке.

<?php // $filter = array('region'=>$name); $categories = get_categories(); foreach ($categories as $cat) { if($cat->parent < 1) { $cat_name = $cat->cat_name; $catid = get_cat_ID( $cat_name ); echo $cat_name. '<br/>'; $args=array( 'orderby' => 'name', 'order' => 'ASC', 'child_of' => $catid ); $categories=get_categories($args); foreach($categories as $category) { echo '<a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>' . $category->name.'</a><br/>'; } } } // print_r($categories); ?> 

Solutions Collecting From Web of "Фильтр get_categories () для таксономии в WordPress"

намерение состоит в том, чтобы показать список категорий, но только те категории, у которых есть должности, в которых область таможенного таксономии установлена ​​в Роттердаме

Это делается в плагине нескольких таксономий :

http://plugins.trac.wordpress.org/browser/query-multiple-taxonomies/trunk/core.php?rev=308185#L10

Общая идея – запрос для определенного набора сообщений, сбор всех их категорий, фильтрация, возможность функции избивать их по форме.

Общий код:

 $posts = get_posts(array( 'tag' => 'linux' )); $categories = array(); foreach( $posts as $post ) { $cats = get_the_category($post->ID); foreach($cats as $c) $categories[] = $c->term_id; } $categories = array_unique($categories); sort($categories); $categories = implode(',', $categories); $result = get_categories(array( 'include' => $categories )); 

Проблемы – насколько я помню, приличные запросы для нескольких таксономий будут поступать только в WP 3.1, и это может стать очень интенсивным, поэтому потребуется кэширование (вероятно, для каждого region ).

В версии wordpress я использую версию 3.1.2. Если вы должны добавить 'таксономия' => 'taxonomy_term' в массив аргументов, он должен работать. Итак, вот модификация вашего исходного кода, чтобы включить таксономию в массив. Не знаю имя таксономии, которое вы пытаетесь использовать или нет, хотя:

 <?php // $filter = array('region'=>$name); $categories = get_categories(); foreach ($categories as $cat) { if($cat->parent < 1) { $cat_name = $cat->cat_name; $catid = get_cat_ID( $cat_name ); echo $cat_name. '<br/>'; $args=array( 'taxonomy' => 'taxonomy_term', 'orderby' => 'name', 'order' => 'ASC', 'child_of' => $catid ); $categories=get_categories($args); foreach($categories as $category) { echo '<a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>' . $category->name.'</a><br/>'; } } } // print_r($categories); ?> 

Простите меня, если я что-то пропустил, но было бы не так просто;

 if (is_object_in_term($post->ID, 'region', 'rotterdam')) the_category(); // displays categories associated with current post 

В админе вы прикрепляете сообщение к «пиццериям» и «еде» (пометив оба флажка) или просто «пиццерии»?

Если последний, the_category() не будет показывать «Продовольствие» по умолчанию, вам придется самостоятельно захватить иерархию категорий.

вы можете вернуть таксономию для персонализированного сообщения с небольшой функцией:

  function get_the_taxonomy( $taxonomy, $id = FALSE ) { global $post; $id = (int) $id; if ( !$id ) $id = (int) $post->ID; $categories = get_object_term_cache( $id, $taxonomy ); if ( FALSE === $categories ) { $categories = wp_get_object_terms( $id, $taxonomy ); wp_cache_add($id, $categories, $taxonomy . '_relationships'); } if ( !empty( $categories ) ) usort( $categories, '_usort_terms_by_name' ); else $categories = array(); foreach ( (array) array_keys( $categories ) as $key ) { _make_cat_compat( $categories[$key] ); } return $categories; } 

Также вы можете использовать функцию wp-core:

 $taxonomys = get_the_term_list($id, YOUR_CUSTOM_POST_TYPE, '', ', ', '' ); 

и вы можете запросить налог с помощью is_tax() , см. код для этого условного тега

Может быть, это помогает, когда я правильно понимаю вашу проблему. Извините за мой плохой английский.

Спасибо всем, что помогли мне – это действительно здорово. Я хотел бы поделиться с вами тем, что я придумал. Я знаю, что это не самое умное решение. Недостатком является то, что родительская категория показана для региона, когда к этому региону не добавлено настраиваемого сообщения (но для другого региона есть специальный пост).

Я использую это на странице региона (таксономический архив).

 <?php $categories = get_categories(); foreach ($categories as $cat) { if($cat->parent < 1) { $cat_name = $cat->cat_name; $catid = get_cat_ID( $cat_name ); echo '<div class="indexcolumn-top">'; $img = $taxonomy_images_plugin->get_image_html( 'fullsize', $cat->term_taxonomy_id ); if( !empty( $img ) ) print $img; else echo '<h2>' .$cat_name. '</h2>'; $input = array(); $args=array( 'child_of' => $catid, 'orderby' => 'name', 'order' => 'ASC' ); $categories = get_categories($args); foreach ($categories as $cat) { $cat_name = $cat->cat_name; $catid = get_cat_ID( $cat_name ); $args = array( 'post_status' => 'publish', 'taxonomy_name' => 'region', 'taxonomy_term' => $name, ); $custom_posts = get_posts_by_taxonomy($args); if ($custom_posts): foreach ($custom_posts as $post): setup_postdata($post); $postcategory = get_the_category(); $postcat = $postcategory[0]->cat_name; if ($postcat == $cat_name): $category = get_the_category(); $input[] = $catid; endif; endforeach; endif; } echo '<br/>'; $output = array_unique($input); if (empty($output)): echo '<p>Geen bedrijven</p>'; echo '</div>'; else : echo '<ul class="port-box">'; foreach ($output as $output) { $cat_name = get_cat_name($output); echo '<li><a href="' . get_category_link($output) . '" title="' . sprintf( __( "View all posts in %s" ), $cat_name ) . '" ' . '>' . $cat_name .'</a></li>'; } echo '</ul></div>'; endif; } } ?> 
 <?php $cat_id = $_GET["cat"];?> <li id="category-active"><a><?php if ($cat_id){echo get_the_category_by_id($li_id);}else{ echo "Selectedcategory";}?></a></li> <?php $subcategories1 = wp_list_categories("title_li&child_of=$cat_id&hide_empty"); wp_list_categories("title_li=&current_category="); ?> </ul><?php ?> 

Спасибо за вашу помощь.

но я думаю, что их нет необходимости в foreach или любом цикле, мы можем получить дочерний $li_id любой категории, используя этот простой код, сначала $li_id получить текущий идентификатор cat, и мы динамически передали этот id в child_of=$cat_id и он отображает выбранные child_of=$cat_id кошки Я использую его в боковой панели сайта.

Я адаптировал ответ @ rarst сверху, чтобы использовать 3 пользовательских таксономии. Я только хочу выплюнуть термины, которые прикреплены к одному или нескольким сообщениям в цикле.

Вот моя функция, которую я добавил в functions.php:

 function dv_setup_sidebar_cats() { global $wp_query; $designers = array(); $sizes = array(); $colors = array(); foreach( $wp_query->posts as $post ) { $des = get_the_terms($post->ID, 'designer'); $siz = get_the_terms($post->ID, 'size'); $col = get_the_terms($post->ID, 'color'); foreach($des as $d) { $designers[] = $d->term_id; } foreach($siz as $s) { $sizes[] = $s->term_id; } foreach($col as $c) { $colors[] = $c->term_id; } } if ( !empty($designers) ) { $designers = array_unique($designers); sort($designers); $designers = implode(',', $designers); $dresult = get_categories(array( 'include' => $designers, 'taxonomy' => 'designer' )); } if ( !empty($sizes) ) { $sizes = array_unique($sizes); sort($sizes); $sizes = implode(',', $sizes); $sresult = get_categories(array( 'include' => $sizes, 'taxonomy' => 'size' )); } if ( !empty($colors) ) { $colors = array_unique($colors); sort($colors); $colors = implode(',', $colors); $cresult = get_categories(array( 'include' => $colors, 'taxonomy' => 'color' )); } $return = array( 'size' => $sresult, 'color' => $cresult, 'designer' => $dresult ); return $return; } 

Надеюсь, это помогает кому-то другому.

-J