Array get_categories im Vergleich zu einem anderen Array neu anordnen

Ich habe eine function, die den neuesten Post aus jeder Kategorie zieht und Kategorien nach den letzten Posts sortiert. Was ich davon bekomme, ist ein Array mit Kategorie-IDs, mit denen ich das Array get_categories neu anordnen möchte.

/* Get all categories */ $categories = get_categories(); /* Create empty array */ $categories_order = []; /* For each category */ foreach($categories as $category) { /* Modify WP query */ $args = array('posts_per_page' => 1, /* Max 1 post */ 'category__in' => array($category->term_id), /* In this specific category */ 'ignore_sticky_posts' => true ); /* No sticky posts */ /* Get all posts from categories with modifier */ $posts = get_posts($args); /* If there are posts */ if ($posts) { /* For each post */ foreach($posts as $post) { /* Add to array key => value (category id => time published) */ $categories_order[$category->term_id] = get_post_time('YmdHis'); } } } arsort($categories_order); /* Order new array by value */ $categories_order = array_keys($categories_order); /* Remove array values */ print_r($categories_order); 

Meine function gibt zurück:

Array ( [0] => 2 [1] => 5 [2] => 4 )

get_categories gibt zurück:

 Array ( [1] => stdClass Object ( [term_id] => 2 [name] => Спорт [slug] => sport [term_group] => 0 [term_taxonomy_id] => 2 [taxonomy] => category [description] => [parent] => 0 [count] => 6 [cat_ID] => 2 [category_count] => 6 [category_description] => [cat_name] => Спорт [category_nicename] => sport [category_parent] => 0 ) [2] => stdClass Object ( [term_id] => 4 [name] => Дом и градина [slug] => home-and-garden [term_group] => 0 [term_taxonomy_id] => 4 [taxonomy] => category [description] => [parent] => 0 [count] => 1 [cat_ID] => 4 [category_count] => 1 [category_description] => [cat_name] => Дом и градина [category_nicename] => home-and-garden [category_parent] => 0 ) [3] => stdClass Object ( [term_id] => 5 [name] => Транспорт [slug] => transport [term_group] => 0 [term_taxonomy_id] => 5 [taxonomy] => category [description] => [parent] => 0 [count] => 1 [cat_ID] => 5 [category_count] => 1 [category_description] => [cat_name] => Транспорт [category_nicename] => transport [category_parent] => 0 ) ) 

Nun sollte irgendwie get_categories term_id mit meinem Array verglichen werden und die Objekte entsprechend neu angeordnet werden.

Solutions Collecting From Web of "Array get_categories im Vergleich zu einem anderen Array neu anordnen"

Lange Rede, kurzer Sinn: Erstellen Sie ein neues Array mit den nach ID indizierten Kategorien. Dann können Sie einfach die date-sortierten IDs durchlaufen und mit ihnen tun, wie Sie möchten:

 $categories = get_categories(); $cats_index = $cats_dates = array(); foreach( $categories as $category ) { // Index the categories by their ID $cats_index[ $category->term_id ] = $category; $posts = get_posts( array( 'ignore_sticky_posts' => true, 'posts_per_page' => 1, 'category__in' => array( $category->term_id ), ) ); if ( $posts ) $cats_dates[ $category->term_id ] = ( int ) mysql2date( 'U', $posts[0]->post_date_gmt ); else $cats_dates[ $category->term_id ] = 0; } arsort( $cats_dates ); foreach ( array_keys( $cats_dates ) as $cat_id ) { // Loop over category IDs by date descending $category = $cats_index[ $cat_id ]; } 

Usort verwendet eine Callback-function, um ein Array zu sortieren:

 $categories_order = array_flip($categories_order); $categories = usort( get_categories(), function( $a, $b ) { return $categories_order( $a['term_id'] ) - $categories_order( $b['term_id'] ); }