Cum să ordonezi după categorie și post în interogarea personalizată WP

5 feb. 2017, 05:22:19
Vizualizări: 26.4K
Voturi: 5

NB: Nu am suficiente puncte de reputație pentru a pune întrebarea direct pe postul menționat.

Am folosit niște cod de la 1: Obține toate categoriile și postările din acele categorii

Aceasta listează toate categoriile cu postările din acele categorii, dar am probleme cu setarea ordinii...

Mai exact Revedeți răspunsul aici

<?php

$args = array( 
    'posts_per_page' => -1
);

$query = new WP_Query($args);   
$q = array();

while ( $query->have_posts() ) { 

    $query->the_post(); 

    $a = '<a href="'. get_permalink() .'">' . get_the_title() .'</a>';

    $categories = get_the_category();

    foreach ( $categories as $key=>$category ) {

        $b = '<h2><a href="' . get_category_link( $category ) . '">' . $category->name . '</a></h2>';    

    }

    $q[$b][] = $a; // Creează un array cu numele categoriilor și titlurile postărilor
}

/* Restaurare date Post originale */
wp_reset_postdata();

foreach ($q as $key=>$values) {
    echo $key;

    echo '<ul>';
        foreach ($values as $value){
            echo '<li>' . $value . '</li>';
        }
    echo '</ul>';
}

?>  

Ceea ce încerc să fac este să adaug ordonarea după Titlul Categoriei, apoi în cadrul acelei categorii să ordonez după Titlul Postării.

Pot adăuga asta în $args inițial la linia 1

$args = array( 
    'posts_per_page' => -1,
    'orderby'   => 'title',
    'order' => 'ASC',
);

Aceasta sortează categoriile în ordinea titlurilor postărilor conținute în acea categorie.

Încerc să obțin categoriile în ordine ASC, apoi postările din acea categorie tot în ordine ASC dar nu reușesc să le ordonez pe ambele.

Aș fi foarte recunoscător pentru orice sfat.

0
Toate răspunsurile la întrebare 1
0

Pentru a face acest lucru, trebuie mai întâi să obțineți toate categoriile în ordine crescătoare folosind get_categories, apoi trebuie să transmiteți cat_id în WP_Query pentru a obține postările asociate cu acea categorie.

$args_cat = [
    'orderby' => 'name', // Ordonează după nume
    'order' => 'ASC',    // Ordine crescătoare
    'hide_empty' => 0,   // Afișează și categoriile goale
];

$categories = get_categories($args_cat);
//print_r($categories);

if (!empty($categories)):
    foreach ($categories as $category):
        $args = [
            'post_type' => 'post',          // Tipul de postare
            'posts_per_page' => -1,         // Toate postările
            'order' => 'ASC',               // Ordine crescătoare
            'orderby' => 'title',           // Ordonează după titlu
            'cat' => $category->term_id    // ID-ul categoriei
        ];

        $query = new WP_Query($args);
        while ($query->have_posts()) : $query->the_post();
            //Codul tău
            the_title(); // Afișează titlul postării
        //...
        endwhile;
        wp_reset_postdata(); // Resetează interogarea 
    endforeach;
endif;

Sper că acest lucru vă ajută!

5 feb. 2017 09:00:20