Intereting Posts

get_categories иерархический порядок, например wp_list_categories – с именем, slug & link для редактирования cat

Мне нужно найти способ перечислить все категории – пустые или нет – в иерархическом списке – например, wp_list_categories – также показывается имя slug, cat и ссылка для редактирования в admin.

Вот что я имею до сих пор:

$args = array( 'orderby' => 'name', 'order' => 'ASC', 'hide_empty' => '0', ); $categories = get_categories($args); foreach( $categories as $category ) { $cat_ID = $category->term_id; $cat_name = $category->name; #$cat_desc = $category->description; if ( !$cat_desc { $cat_desc = 'Nada!' } ); $cat_count = $category->count; echo '<p><strong>'.$cat_name.'</strong>'; echo ' / <a href="' . get_category_link( $cat_ID ) . '" title="' . sprintf( __( "View all posts in %s" ), $cat_name ) . '" ' . '>View ( '. $cat_count . ' posts )</a> '; #echo ' / Desc: '. $cat_desc . ''; echo ' / <a href="'. get_admin_url().'edit-tags.php?action=edit&taxonomy=category&tag_ID='.$cat_ID.'&post_type=post" title="Edit Category">Edit</a>'; echo '</p>'; } 

Все хорошо, но не очень удобно – просто алфавитный список.

вывод как неупорядоченный список:

 <?php hierarchical_category_tree( 0 ); // the function call; 0 for all categories; or cat ID function hierarchical_category_tree( $cat ) { // wpse-41548 // alchymyth // a hierarchical list of all categories // $next = get_categories('hide_empty=false&orderby=name&order=ASC&parent=' . $cat); if( $next ) : foreach( $next as $cat ) : echo '<ul><li><strong>' . $cat->name . '</strong>'; echo ' / <a href="' . get_category_link( $cat->term_id ) . '" title="' . sprintf( __( "View all posts in %s" ), $cat->name ) . '" ' . '>View ( '. $cat->count . ' posts )</a> '; echo ' / <a href="'. get_admin_url().'edit-tags.php?action=edit&taxonomy=category&tag_ID='.$cat->term_id.'&post_type=post" title="Edit Category">Edit</a>'; hierarchical_category_tree( $cat->term_id ); endforeach; endif; echo '</li></ul>'; echo "\n"; } ?> 

Немного обновленная версия ответа Майкла на использование более общих get_terms (так что вы можете получить пользовательские таксономии, в этом случае мне нужна система классификации товаров категории WooCommerce product_cat ).

 echo hierarchical_term_tree(); function hierarchical_term_tree($category = 0) { $r = ''; $args = array( 'parent' => $category, ); $next = get_terms('product_cat', $args); if ($next) { $r .= '<ul>'; foreach ($next as $cat) { $r .= '<li><a href="' . get_term_link($cat->slug, $cat->taxonomy) . '" title="' . sprintf(__("View all products in %s"), $cat->name) . '" ' . '>' . $cat->name . ' (' . $cat->count . ')' . '</a>'; $r .= $cat->term_id !== 0 ? hierarchical_term_tree($cat->term_id) : null; } $r .= '</li>'; $r .= '</ul>'; } return $r; } 

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

Хм, я думаю, вам нужно включить 'hierarchical' => 1, в ваш список args. Также у вас есть одна запятая слишком много в конце списка args. После последнего аргумента вам не нужна запятая 🙂

Вот полный пример:

 $args = array( 'orderby' => 'name', 'order' => 'ASC', 'hierarchical' => 1, 'hide_empty' => '0' );