web-dev-qa-db-fra.com

Réorganiser les messages en fonction des catégories

Salut tout le monde sur Stackexchange!

J'essaie de trouver un moyen de hiérarchiser les publications en fonction d'une catégorie dans une boucle, triée par date. Tous les articles sont regroupés sous leurs dates respectives. Les étiquettes de date apparaissent une fois au-dessus des publications de la même date, comme ceci:

Rendez-vous amoureux

  • Post1
  • Post2
  • Post3

Date avant celle

  • Poste 4
  • Poste 5

etc

J'essaie d'obtenir un résultat: dans le cas où un message appartient à une certaine catégorie prédéterminée (je n'utiliserais qu'une catégorie), il serait déplacé au-dessus des autres sous une date en tant que telle:

Rendez-vous amoureux

  • Post3 (catégorie spéciale)
  • Post1
  • Post2

Date avant celle

  • etc

J'ai fait des recherches sur ce sujet pendant un certain temps et je ne sais pas si cela serait possible ou non. Certaines fonctions d'interrogation semblent avoir un objectif similaire, mais je n'en suis pas certain et le tri par date rend plus difficile la détermination. Aurais-je besoin de plusieurs boucles ou de quelque chose de ce genre?

Ma boucle: http://Pastebin.com/Pp0rA5j7

La boucle et le mécanisme de tri ressemblent à ceci en général (Pastebin pour un code complet):

<?php $w_h = $w_d = $last = 0; ?>

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

    <?php
    if ( date('Yz') == get_the_time('Yz') ) {
        if (!$w_d++) echo '<h6>Today</h6>';
    } elseif ( date('Yz')-1 == get_the_time('Yz') ) {
        if (!$w_h++) echo '<h6>Yesterday</h6>';
    } else {
        echo the_date('', '<h3>', '</h3>');
    }; ?>

// post content

    <?php endwhile; ?>
    <?php endif; ?>
                     <?php else : ?>

Exemple de site: http://goldenred.web44.net (je souhaite déplacer le post-test 6 avec la catégorie "test" ci-dessus les autres en février 3 2013)

Je serais extrêmement reconnaissant si quelqu'un de plus expérimenté pouvait m'aider ou au moins me diriger vers une direction générale. Tous les commentaires sont les bienvenus.

4
user27104

Bon, j’ai cherché les options WP_Query et j’ai commencé à me demander s’il serait plus facile d’abolir le système de tri des dates actuel pour un système plus efficace et plus flexible en termes de personnalisation? Personnellement, je suis tout à fait en faveur de solutions originales et je ne suis pas attaché au code que j'ai dans mon index. L'objectif principal serait de n'atteindre que la fonctionnalité décrite - les publications groupées par dates et la hiérarchisation (2 niveaux) au sein des groupes. Tout le reste pourrait changer par moi. Cette fonctionnalité n'est pas pour un client ou quoi que ce soit, c'est pour mon site web personnel. J'ai vraiment besoin de cette fonctionnalité. Bref, voici le code que j'ai trouvé:

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

$myQuery = new WP_Query($args);

$date = '';

if ( $myQuery->have_posts() ) : while ( $myQuery->have_posts() ) : $myQuery->the_post();

if ( $date != get_the_date() ) {
    echo $date;
    echo '<hr />';
    $date = get_the_date();
}

the_title(); // or whatever you want here.
echo '<br />';

endwhile; endif;
wp_reset_postdata();

Est-ce que quelque chose comme ceci serait une meilleure base pour ce que j'ai décrit?

1
user27104

Peut-être que c'est une mauvaise idée, mais c'est la seule.

N'imprimez pas les publications immédiatement, mais collectez-les dans différentes variables: une pour la catégorie "test", une pour la suite.

<?php
$w_h = $w_d = $last = 0;
// init variables to concatenate content later
$primary_posts = $secondary_posts = '';
// empty array to fill later
$category_names = array();
if (have_posts()) :
    while (have_posts()) :
        the_post();
        if ( date('Yz') == get_the_time('Yz') ) {
            if (!$w_d++) echo '<h6>Today</h6>';
        } elseif ( date('Yz')-1 == get_the_time('Yz') ) {
            if (!$w_h++) echo '<h6>Yesterday</h6>';
        } else {
            echo the_date('', '<h3>', '</h3>');
        };
        // get post categories
        $category_objects = get_the_category();
        foreach($category_objects as $category_object) {
            $category_names[] = $category_object->name;
        }
        // if posts belongs to category 'test'
        if( in_array('test', $category_names) ) {
            $primary_posts .= '<div class="post">Post of category "test"';
            // title, categories and excerpt goes here
            $primary_posts .= '</div><!-- .post -->';
        }
        else {
            $secondary_posts .= '<div class="post">Post of category other than "test"';
             // title, categories and excerpt goes here
            $secondary_posts .= '</div><!-- .post -->';
       }

    endwhile;
    // output all posts of category "test"
    echo $primary_posts;
    // output all posts of category other than "test"
    echo $secondary_posts;
endif;
1
Max Yudin