Reorganizando postagens com base em categorias

4

Olá a todos no Stackexchange!

Estou tentando encontrar uma maneira de priorizar postagens com base em uma categoria em um loop, classificada por datas. Todas as postagens estão agrupadas em suas respectivas datas. Os rótulos de data aparecem uma vez no topo das postagens da mesma data, assim:

Data

  • Post1
  • Post2
  • Post3

Data antes disso

  • Post 4
  • Post 5

etc

Estou tentando alcançar um resultado, em que se uma postagem pertencer a uma determinada categoria predeterminada (eu estaria usando apenas uma categoria), ela seria movida acima de outras abaixo de uma data como essa:

Data

  • Post3 (categoria especial)
  • Post1
  • Post2

Data antes disso

  • etc

Eu fiz pesquisa por um tempo sobre este tópico e não consigo descobrir se isso seria possível ou não. Algumas funções de consulta parecem servir a um propósito semelhante, mas não tenho certeza e a classificação de datas dificulta a descoberta. Eu precisaria de vários loops ou algo dessa natureza?

Meu loop: enlace

O loop e o mecanismo de classificação se parecem com isso em geral (pastebin para um 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 : ?>

Exemplo de site: enlace (Eu gostaria de passar o teste 6 com a categoria "teste" acima de outros em 3 de fevereiro de 2013 )

Eu ficaria extremamente grato se alguém mais experiente pudesse me ajudar ou ao menos me direcionar para uma direção geral. Todos os comentários são bem vindos.

    
por user27104 06.02.2013 / 19:30

2 respostas

1

Pode ser uma má ideia, mas é a única.

Não imprima mensagens imediatamente, mas colete-as em diferentes variáveis: uma para a categoria "teste" e outra para o restante.

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

Tudo bem, eu olhei as opções do WP_Query e comecei a descobrir se seria mais fácil abolir o atual sistema de classificação de datas para um sistema mais eficiente que seria mais flexível em termos de personalização? Pessoalmente, eu sou todo para soluções fora da caixa e não estou ligado ao código que tenho no meu índice. O principal objetivo seria alcançar apenas a funcionalidade descrita - postagens agrupadas por datas e priorizando (2 níveis) dentro de grupos. Tudo o mais poderia mudar por mim. Este recurso não é para um cliente ou qualquer coisa, é para o meu site pessoal. Eu realmente preciso dessa funcionalidade. De qualquer forma, divagar o suficiente, aqui está o código que encontrei:

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

Algo assim seria uma base melhor para o que descrevi?

    
por user27104 08.02.2013 / 09:44