Reordenar las publicaciones según categorías

4

¡Hola a todos en Stackexchange!

Estoy tratando de encontrar una manera de priorizar las publicaciones basadas en una categoría en un bucle, que está ordenada por fechas. Todas las publicaciones están agrupadas en sus respectivas fechas. Las etiquetas de fecha aparecen una vez encima de las publicaciones de la misma fecha como esta:

Fecha

  • Post1
  • Post2
  • Post3

Fecha anterior a eso

  • Publicar 4
  • Publicar 5

etc

Estoy tratando de lograr un resultado, donde si una publicación pertenece a una determinada categoría predeterminada (solo usaría 1 categoría), se movería por encima de otras en una fecha como tal:

Fecha

  • Post3 (categoría especial)
  • Post1
  • Post2

Fecha anterior a eso

  • etc

He investigado un poco sobre este tema y no puedo averiguar si esto sería posible o no. Algunas funciones de consulta parecen tener un propósito similar, pero no estoy seguro y la clasificación de fechas hace que sea más difícil de descifrar. ¿Necesitaría varios bucles o algo de esa naturaleza?

Mi bucle: enlace

El bucle y el mecanismo de clasificación se ven así en general (pastebin para un código completo):

<?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 : ?>

Sitio de muestra: enlace (me gustaría mover la prueba posterior 6 con la categoría "prueba" por encima de otras bajo el 3 de febrero de 2013 )

Estaría extremadamente agradecido si alguien más experimentado pudiera ayudarme o al menos dirigirme hacia una dirección general. Todos los comentarios son bienvenidos.

    
pregunta user27104 06.02.2013 - 19:30

2 respuestas

1

Puede que sea una mala idea, pero es la única.

No imprima publicaciones de inmediato, sino que las recopila en diferentes variables: una para la categoría "prueba" y otra para el resto.

<?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;
    
respondido por el Max Yudin 06.02.2013 - 21:13
1

Bien, busqué las opciones de WP_Query y empecé a pensar si sería más fácil eliminar el sistema actual de clasificación de fechas por uno más eficiente que sería más flexible en términos de personalización. Personalmente, estoy a favor de soluciones listas para usar y no estoy adjunto al código que tengo en mi índice. El objetivo principal sería lograr solo la funcionalidad descrita: publicaciones agrupadas por fechas y priorización (2 niveles) dentro de los grupos. Todo lo demás podría cambiar por mí. Esta característica no es para un cliente ni nada, es para mi sitio web personal. Realmente necesito esa funcionalidad. De todos modos, bastantes divagaciones, aquí está el código que encontré:

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

¿Sería algo como esto una mejor base para lo que describí?

    
respondido por el user27104 08.02.2013 - 09:44

Lea otras preguntas en las etiquetas