web-dev-qa-db-fra.com

Comment obtenir toutes les catégories uniques pour les messages en boucle?

Je cherche à obtenir une liste simple des catégories uniques dans une boucle personnalisée (uniquement des catégories pour les publications dans la boucle). Je cherche un peu de code depuis un moment et voici ce que j'ai:

<?php
    $args = array(
        'post_status'=>'publish',
        'post_type'=>'post',
        'posts_per_page'=>-1
    );
    $get_posts = new WP_Query();

    $get_posts->query($args);
    if($get_posts->have_posts()) {

    $cats = array();
    while($get_posts->have_posts()) { $get_posts->the_post();

            $post_categories = wp_get_post_categories( get_the_ID() );
            $i = 0;
            foreach($post_categories as $c){
                $cat = get_category( $c );
                $cats[$i] = $cat->slug ;
                $i++;
            }

        } //endwhile
        $result = array_unique($cats);
       print_r($result);

    } //endif
    wp_reset_postdata();
?>

Cela mettra chaque catégorie de messages dans un tableau et je pourrai l’imprimer. Mais je veux fusionner chaque tableau de catégories de messages, supprimer les doublons (pour qu’il n’y ait qu’une seule instance de chaque catégorie unique), puis pouvoir l’imprimer.

Ce que je veux essentiellement faire, c’est d’avoir un menu déroulant que ces catégories peuvent utiliser pour pouvoir trier une catégorie particulière en actualisant la boucle avec cette catégorie sélectionnée. Je peux gérer le reste, je dois juste obtenir cette liste de catégories uniques et non dupliquées pour toutes les publications en boucle.

Quelqu'un a des idées?

Merci beaucoup, Jonas

1
Jonah

EDIT: $i = 0 déplacé en dehors de la boucle. Cela devrait vous donner la liste complète des catégories.

$get_posts = new WP_Query();
$i = 0;
$get_posts->query($args);
if($get_posts->have_posts()) {
    $cats = array();
    while($get_posts->have_posts()) { $get_posts->the_post();
        $post_categories = wp_get_post_categories( get_the_ID() );
        foreach($post_categories as $c){
            $cat = get_category( $c );
            $cats[$i] = $cat->slug ;
            $i++;
        }
    } //endwhile
    $result = array_unique($cats);
    print_r($result);

} //endif
wp_reset_postdata();

Fondamentalement, il aplatit les tableaux imbriqués dans $cats - je pense que array_unique a peut-être jeté des catégories parce qu'elles avaient une clé identique.

1
Chris Quinn

EDIT

Vous sauvegardez les catégories dans le tableau. C'est très bien. Je change ce bloc sur le code. Voir le code modifié

    $cats = array();    
    while($get_posts->have_posts()) { $get_posts->the_post();

        $post_categories = wp_get_post_categories( get_the_ID() );

        foreach($post_categories as $c){
            $cat = get_category( $c );
            $cats[] = array( 'slug' => $cat->slug );
        }

    } //endwhile
    $result = array_unique($cats);
   print_r($result);

Il y a array_unique function. En utilisant cette fonction, vous pouvez obtenir une valeur unique. Voir le tutoriel ici pour une meilleure connaissance.

0
Chinmoy Kumar Paul