Recuperar a última postagem por várias categorias com ID

Eu tenho as categorias listadas abaixo no meu tipo de publicação do product .

 Category Name: Test 1 ID: 82 Category Name: Test 2 ID: 83 Category Name: Test 3 ID: 84 Category Name: Test 4 ID: 85 

Agora eu quero recuperar para cada publicação de categoria uma – a última adicionada.

Eu tentei abaixo do código, mas não está funcionando corretamente.

  82,83,84,85, 'post_type' => 'product', 'orderby' => 'post_date', 'order' => 'DESC', 'post_status' => 'publish', 'posts_per_page' => 4 ); $postslist = get_posts( $args ); foreach ($postslist as $post) : setup_postdata($post); ?> 

<a href="https://wordpress.stackexchange.com//questions/127509/retrieve-latest-post-by-multiple-categories-with-id/">

Solutions Collecting From Web of "Recuperar a última postagem por várias categorias com ID"

O problema é que se você passar várias categorias para uma consulta, então você recuperará 4 posts ordenados por data, mas se as últimas 4 postagens estiverem em uma categoria, você receberá todas as 4 postagens da mesma categoria.

Você tem 2 opções: execute 4 consultas diferentes, uma por categoria e recupere uma publicação por consulta ou execute uma consulta sql personalizada que recupere as postagens cuidando de obter uma postagem por categoria.

Eu lhe darei uma solução para a segunda escolha.

O código é o formulário mais feito aqui .

 function get_unique_post_by_tax( $tax = 'product_cat_', $ids = '', $cpt = 'product') { global $wpdb; $ids = array_filter( array_map( 'intval', (array) $ids ) ); if ( empty($ids) ) return false; $ids_txt = implode( ',', $ids ); return $wpdb->get_results( $wpdb->prepare( "SELECT p.* FROM $wpdb->term_relationships JOIN $wpdb->term_taxonomy AS tt ON tt.term_taxonomy_id = $wpdb->term_relationships.term_taxonomy_id JOIN $wpdb->posts AS p ON p.ID = $wpdb->term_relationships.object_id WHERE tt.taxonomy = %s AND tt.term_id = IN (%s) AND p.post_type = %s AND p.post_status = 'publish' GROUP BY $wpdb->term_relationships.term_taxonomy_id ORDER BY post_date DESC LIMIT %d", $tax, $cpt, $ids_txt, count($ids) ) ); } 

Coloque a function anterior em functions.php depois disso, você pode usá-lo assim:

 $loop = get_unique_post_by_tax( 'product_cat_', array(82,83,84,85) ); if ( ! empty($loop) ) { global $post; foreach ( $loop as $post ) : setup_postdata($post); ?> 

< ?php the_title(); ?>

; < ?php endforeach; wp_reset_postdata(); }