web-dev-qa-db-ja.com

ループ内の投稿のすべての固有のカテゴリを取得する方法

私はカスタムループ(ループ内の投稿のためのカテゴリのみ)でユニークなカテゴリのプレーンリストを取得しようとしています。私は少しの間いくつかのコードをいじっていて、これが私が持っているものです:

<?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();
?>

これで各投稿カテゴリが配列になり、それを印刷することができます。しかし、私は各投稿のカテゴリーの配列をマージし、重複を取り除き(したがって、それぞれのユニークなカテゴリーのインスタンスは1つしかない)、それからそれを印刷できるようにしたい。

基本的に私が達成したいのは、選択したカテゴリでループを更新することによって特定のカテゴリでソートできるようにこれらのカテゴリのドロップダウンを使用することです。残りの部分は処理できます。ループ内のすべての投稿について、重複のない一意のカテゴリのリストを取得する必要があります。

誰かアイデアがありますか?

ありがとう、ジョナ

1
Jonah

編集:$i = 0をループの外側に移動しました。それはあなたにカテゴリの完全なリストを取得するはずです。

$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();

基本的にそれは$catsの入れ子になった配列を平らにします - 私はarray_uniqueが同じキーを持っていたのでカテゴリーを捨てていたかもしれないと思います。

1
Chris Quinn

編集

カテゴリを配列に保存しています。これはとてもいい。このブロックをコード上で変更しています。修正されたコードを見る

    $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);

array_unique関数があります。この機能を使用すると、あなたはユニークな価値を得ることができます。より良い知識についてはチュートリアル ここ を参照してください。

0