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
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.
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.