it-swarm.com.de

Wie bekomme ich alle eindeutigen Kategorien für Posts in Schleife?

Ich suche nach einer einfachen Liste der eindeutigen Kategorien in einer benutzerdefinierten Schleife (nur Kategorien für die Beiträge in der Schleife). Ich habe ein bisschen an Code gefummelt und hier ist, was ich habe:

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

Dadurch werden die Kategorien der einzelnen Beiträge in ein Array eingeteilt und ich kann sie ausdrucken. Aber ich möchte jedes Posting-Array von Kategorien zusammenführen, Duplikate entfernen (es gibt also nur eine Instanz jeder eindeutigen Kategorie) und es dann ausdrucken können.

Im Wesentlichen möchte ich ein Dropdown-Menü für diese Kategorien erstellen, damit Sie nach einer bestimmten Kategorie sortieren können, indem Sie die Schleife mit dieser ausgewählten Kategorie aktualisieren. Ich kann den Rest erledigen, ich muss nur diese Liste eindeutiger, nicht duplizierter Kategorien für alle Posts in einer Schleife abrufen.

Hat jemand irgendwelche Ideen?

Vielen Dank, Jonah

1
Jonah

BEARBEITEN: $i = 0 außerhalb der Schleife verschoben. Das sollte Ihnen die vollständige Liste der Kategorien bringen.

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

Grundsätzlich werden die verschachtelten Arrays in $cats reduziert. Ich denke, array_unique hat möglicherweise Kategorien verworfen, weil sie einen identischen Schlüssel hatten.

1
Chris Quinn

EDIT

Sie speichern die Kategorien im Array. Das ist sehr gut. Ich ändere diesen Code-Block. Siehe den geänderten Code

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

Es gibt array_unique function. Mit dieser Funktion erhalten Sie einen eindeutigen Wert. Weitere Informationen finden Sie im Tutorial hier .

0