Intereting Posts
Атрибут заголовка эха php Поиск и фильтр-плагин – Как отключить перенаправление WooCommerce: список всех категорий Бесплатный хостинг файлов для WordPress body_class Поле REST в WP-API Невозможно вытащить сообщения из настраиваемого типа сообщений на основе пользовательской таксономии CPT Как получить идентификаторы тегов html из шаблона? Как отображать контент, специфичный для пользователя? При добавлении пользовательской конечной точки REST, куда вы помещаете функцию конечной точки, и где вы поместите вызов регистрации функции? Где получить информацию о полях массива в $ _REQUEST? Крючок wpmu_new_blog не вызывается при добавлении нового сайта на многопользовательском Как импортировать несколько значений в настраиваемое поле Проблемы при изменении постоянной ссылки Структура Как добавить метаполя для пользователя с помощью wp-api? CSS не обновляется в браузере, когда я его меняю

Как отсортировать список настраиваемых сообщений, чтобы получить представление, подобное дереву сообщений по категориям и категориям их детей?

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

КАТЕГОРИЯ 1

  • ДЕТСКАЯ КАТЕГОРИЯ 1

    • После
    • После
    • После
  • ДЕТСКАЯ КАТЕГОРИЯ2

    • После
    • После
    • После

КАТЕГОРИЯ 2

  • ДЕТСКАЯ КАТЕГОРИЯ3
    • После
    • После
    • После

КАТЕГОРИЯ 3

  • После
  • После

  • ДЕТСКАЯ КАТЕГОРИЯ4

    • После
    • После
    • После

Возможно ли это с помощью этого кода:

<?php $querystr = "SELECT terms.* FROM $wpdb->term_taxonomy tax LEFT JOIN $wpdb->terms terms ON tax.term_id = terms.term_id WHERE tax.taxonomy = 'MY_CUSTOM_TAXONOMY'"; $categories = $wpdb->get_results($querystr, OBJECT); foreach( $categories as $category ): echo '<div class="category-header"><h3>'.$category->name.'</h3>'; echo '<p class="category-description">'.strip_tags(term_description($category->term_id,'MY_CUSTOM_TAXONOMY')).'</p></div>'; $posts = get_posts( array( 'MY_CUSTOM_TAXONOMY' => $category->name, 'post_type' => 'MY_CUSTOM_POST' ) ); foreach($posts as $post) : setup_postdata($post); the_title(); endforeach; endforeach; ?> 

Я буду благодарен за помощь, спасибо!

Solutions Collecting From Web of "Как отсортировать список настраиваемых сообщений, чтобы получить представление, подобное дереву сообщений по категориям и категориям их детей?"

хорошо, это мое рабочее решение:

 <?php $args=array( 'post_type' => 'biblioteka', 'child_of' => 0, 'parent' => '', 'orderby' => 'name', 'order' => 'ASC', 'hide_empty' => 1, 'hierarchical' => 1, 'exclude' => '', 'include' => '', 'number' => '', 'taxonomy' => 'kategoria-pozycji', 'pad_counts' => false ); $categories=get_categories($args); foreach ( $categories as $category ) { if ( $category->parent > 0 ) { continue; } echo '<h1 style="font-weight:bold">' . $category->name . '</h1>'; $querystr = "SELECT $wpdb->posts.* FROM $wpdb->posts, $wpdb->term_relationships, $wpdb->terms WHERE term_id = (" . $category->cat_ID . ") AND term_taxonomy_id = (" . $category->term_taxonomy_id . ") AND ID = object_id AND post_type = 'biblioteka' AND post_status = 'publish' ORDER BY post_date DESC"; $posts = $wpdb->get_results($querystr, OBJECT); echo '<ul>'; foreach ( $posts as $post ) { setup_postdata($post); echo '<li>'; the_title(); echo '</li>'; } echo '</ul>'; $categories2 = get_terms('kategoria-pozycji',array('parent' => $category->term_id , 'hide_empty'=> '0' )); foreach ( $categories2 as $category ) { echo '<h2>' . $category->name . '</h2>'; $posts = get_posts( array( 'kategoria-pozycji' => $category->name, 'post_type' => 'biblioteka' ) ); echo '<ul>'; foreach($posts as $post) { setup_postdata($post); echo '<li>'; the_title(); echo '</li>'; } echo '</ul>'; } } ?> 

Я немного поиграл, и это то, что я придумал, я тестировал и работает так же, как и ваш пример:

 <ul> <?php // get initial categories $categories = get_categories(); foreach ( $categories as $category ) { // we don't want child categories now, and since get_categories does not support 'depth' parameter, we use ->parent check if ( $category->parent > 0 ) { continue; } $i = 0; echo '<li>' . $category->cat_name . '</li>'; $posts = get_posts( array( 'category' => $category->term_id ) ); foreach ( $posts as $post ) { // let's make sure that the post is not also in any of child categories, if it is, skip it ( we don't want to display it twice ) $child_categories = get_term_children( $category->term_id, 'category' ); if ( $child_categories && in_category( $child_categories, $post->ID ) ) { continue; } echo 0 === $i ? '<ul>' : ''; echo '<li>' . $post->post_title . '</li>'; $i++; } // now, after we listed all the posts, we query for child categories $categories2 = get_categories( array( 'parent' => $category->term_id ) ); foreach ( $categories2 as $category ) { $j = 0; echo '<li>' . $category->cat_name . '</li>'; $posts2 = get_posts( array( 'category' => $category->term_id ) ); foreach ( $posts2 as $post ) { echo 0 === $j ? '<ul>' : ''; echo '<li>' . $post->post_title . '</li>'; $j++; } echo null === $posts2 ? '' : '</ul>'; } echo null === $posts ? '' : '</ul>'; } ?> </ul> 

Вот решение, которое я решил проблемы, поскольку вы испытываете

  //Define Some require define(TAX_TYPE, 'category'); //you can also replace your custom taxonomy in category $terms = get_terms(TAX_TYPE); define(WP_HOME, 'http://yourdomain.com'); ?> <div class="menu-tours-container"> <ul id="menu-tours" class="menu"> <?php foreach( $terms as $tax_term ) : $permalink = WP_HOME . '/' . TAX_TYPE . '/' . $tax_term->slug; // getting posts from each tour type $args=array( 'post_type' => 'tour', 'post_status' => 'publish', 'order_by' => 'post_title', 'order' => 'ASC', 'tour-type' => $tax_term->slug ); $posts = get_posts($args); ?> <li> <div class="block-title"> <h4><?php echo $tax_term->name; ?></h4> </div> <ul class="check"> <?php foreach ($posts as $post) : ?> <li><a href="<?php echo get_permalink($post->ID); ?>"><?php echo $post->post_title; ?></a></li> <?php endforeach; ?> </ul> </li> <?php endforeach; ?> </ul> <!--#menu-tours--> </div> 

Мое лучшее решение! (работает для любых таксономий, включая «категорию»)

 $your_taxonomy='category'; function my_Categ_tree($TermName='', $termID, $separator='', $parent_shown=true ){ $args = 'hierarchical=1&taxonomy='.$TermName.'&hide_empty=0&orderby=id&parent='; if ($parent_shown) {$term=get_term($termID , $TermName); $output=$separator.$term->name.'('.$term->term_id.')<br/>'; $parent_shown=false;} $separator .= '-'; $terms = get_terms($TermName, $args . $termID); if(count($terms)>0){ foreach ($terms as $term) { //$selected = ($cat->term_id=="22") ? " selected": ""; //$output .= '<option value="'.$category->term_id.'" '.$selected .'>'.$separator.$category->cat_name.'</option>'; $output .= $separator.$term->name.'('.$term->term_id.')<br/>'; $output .= my_Categ_tree($TermName, $term->term_id, $separator, $parent_shown); } } return $output; } , $your_taxonomy='category'; function my_Categ_tree($TermName='', $termID, $separator='', $parent_shown=true ){ $args = 'hierarchical=1&taxonomy='.$TermName.'&hide_empty=0&orderby=id&parent='; if ($parent_shown) {$term=get_term($termID , $TermName); $output=$separator.$term->name.'('.$term->term_id.')<br/>'; $parent_shown=false;} $separator .= '-'; $terms = get_terms($TermName, $args . $termID); if(count($terms)>0){ foreach ($terms as $term) { //$selected = ($cat->term_id=="22") ? " selected": ""; //$output .= '<option value="'.$category->term_id.'" '.$selected .'>'.$separator.$category->cat_name.'</option>'; $output .= $separator.$term->name.'('.$term->term_id.')<br/>'; $output .= my_Categ_tree($TermName, $term->term_id, $separator, $parent_shown); } } return $output; } , $your_taxonomy='category'; function my_Categ_tree($TermName='', $termID, $separator='', $parent_shown=true ){ $args = 'hierarchical=1&taxonomy='.$TermName.'&hide_empty=0&orderby=id&parent='; if ($parent_shown) {$term=get_term($termID , $TermName); $output=$separator.$term->name.'('.$term->term_id.')<br/>'; $parent_shown=false;} $separator .= '-'; $terms = get_terms($TermName, $args . $termID); if(count($terms)>0){ foreach ($terms as $term) { //$selected = ($cat->term_id=="22") ? " selected": ""; //$output .= '<option value="'.$category->term_id.'" '.$selected .'>'.$separator.$category->cat_name.'</option>'; $output .= $separator.$term->name.'('.$term->term_id.')<br/>'; $output .= my_Categ_tree($TermName, $term->term_id, $separator, $parent_shown); } } return $output; } 

Затем вы можете выводить:

1) дерево целевой категории (таксономия) с использованием определенного идентификатора

 echo my_Categ_tree($your_taxonomy, 0 ); 

2) Все категории / таксономии

 foreach (get_terms($your_taxonomy, array('hide_empty'=>0, 'parent'=>0)) as $each) { echo my_Categ_tree($each->taxonomy,$each->term_id); }