Suporte » Desenvolvendo com WordPress » Post exibidos de acordo com o dia da semana

  • Resolvido Sicuro

    (@sicuro)


    Boa noite senhores,
    Gostaria de pedir ajuda a vocês para uma coisa que não estou conseguindo encotrar solução.

    Queria ordenar meus posts por dia da semana, por exemplo:

    SEGUNDA – FEIRA – 07/05/2012

    AQUI VAI O POST 1
    AQUI VAI O POST 2
    AQUI VAI O POST 3

    DOMINGO – 06/05/2012
    AQUI VAI O POST 1
    AQUI VAI O POST 2

    Seria mais ou menos nesse esquema, não estou conseguindo pensar em nenhuma solução… alguém pode abrir minha cabeça?

    agradeço a todos desde ja!

    abraço!

Visualizando 15 respostas - 1 até 15 (de um total de 16)
  • Olá,

    É meio confuso, mesmo porque dia da semana não é levado em conta por ser presumível.

    Na dica que vi aqui, cria-se uma categoria para cada dia da semana (pode ser metadado, tags ou taxo também) e então usa-se query_posts para obter os posts que coincidirem com o nome do dia da semana. Acho que o nome usado na categoria/tag/taxo deve ser em inglês, de acordo com o que o código vai obter.

    Criador do tópico Sicuro

    (@sicuro)

    Consegui fazer o que queria, mas de um método que é usado para criação de arquivo.

    <?php
    
    			// Declare some helper vars
    			$previous_year = $year = 0;
    			$previous_month = $day = 0;
    			$ul_open = false;
    
    			// Get the posts
    			$myposts = get_posts('posts_per_page=10&orderby=post_date&order=DESC' . 'paged=' . $paged);
    
    			?>
    
                <?php   if (have_posts()): while (have_posts()): the_post();?>
    
                <?php foreach($myposts as $post) : ?>
    
                <?php
    
    			// Setup the post variables
    			setup_postdata($post);
    
    			$year = mysql2date('j \d\e F \d\e Y', $post->post_date);
    			$month = mysql2date('j', $post->post_date);
    			$day = mysql2date('j', $post->post_date);
    
    			?>
    
    				<?php if($year != $previous_year || $month != $previous_month) : ?>
                        <?php if($ul_open == true) : ?>
                    <?php endif; ?>
    					<h3><?php the_time('j \d\e F \d\e Y'); ?></h3>
                        <ul>
                        <?php $ul_open = true; ?>
                    <?php endif; ?>
    
         			<?php $previous_year = $year; $previous_month = $month; ?>
                        <!-- INICIO LOOP -->
                      <li>  <div class="informacoes_evento">
                            <div class="thumb"><?php the_post_thumbnail(); ?></div>
                            <div class="titulo_evento"><?php the_title(); ?></div>
                            <div class="valor"><?php $key="valor_evento"; echo get_post_meta($post->ID,$key,true);?></div>
                            <div class="hora_e_local">04/05/2012 | 18:00 | COPACABANA</div>
                            <div class="descricao_evento"> <?php excerpt(130);?>...[ LEIA + ] </div>
                        </div> </li>
                        <!-- FIM LOOP -->
                        </ul>
                   <?php endforeach; ?>
               <?php endwhile; else: ?>
               <?php endif;?>

    Mas provavelmente não vou poder usar essa gambiarra que fiz, pois não estou conseguindo fazer a paginação funcionar.

    Vou testar esse método e posto aqui se deu certo!

    obrigado pela resposta!

    Criador do tópico Sicuro

    (@sicuro)

    Não consegui, não entendi muito bem o que ele fez 🙁
    Não entendi se ele criou uma categoria para cada dia da semana, não ficou muito claro.

    Tenta declarar a variável usada na paginação antes da query:

    // Declare some helper vars
    	$previous_year = $year = 0;
    	$previous_month = $day = 0;
    	$ul_open = false;
            $paged=get_query_var('page')?get_query_var('page'):1;

    Sobre o exemplo que disse, usa-se um item para “rastrear”o post através do WP, que é categoria/taxonomina ou metadado.

    Assim fica mais fácil obter os posts, sem precisar filtrar a data.

    Criador do tópico Sicuro

    (@sicuro)

    Não funfou!
    Esse jeito que fiz deve tá feio demais, e não deve tá pegando 🙁

    Mas de qualquer forma, obrigado pela ajuda, vou tentar fazer de outro jeito!

    Fiz isso outro dia pra separar por mês.

    Tenta algo assim:

    $dias = array(); // declara um array para as datas
    
    echo '<ul>';
    
    if (have_posts()) : while (have_posts()) : the_post(); 
    
        $estedia = get_the_time('l - d/m/Y'); // pega a data de cada post
    
    if (!in_array($estedia,$dias)) { // confere se já está no array
        echo '<h5>'.$estedia.'</h5>'; // se não estiver, imprime o cabeçalho
        $dias[] = $estedia; // e guarda no array
    }
    
    echo '<li>';
    the_title();
    echo '</li>';

    Com esse código vc vai gerar uma lista de títulos que vai ter um cabeçalho com a data logo antes do primeiro post de cada data.

    Criador do tópico Sicuro

    (@sicuro)

    Ricardo, obrigado pela sua ajuda cara!! de coração, e sem querer abusar dela, gostaria que me falasse como aplicar ela no código, juro que não tenho a intenção de te colocar pra trabalhar de graça, é que não sou programador, sou um designer curioso! Teria como me explicar como aplicar nesse modo que estou usando?

    <?php  query_posts('cat=10&posts_per_page=10' . '&paged=' . $paged); ?>
                <?php   if (have_posts()): while (have_posts()): the_post();?>
    
                <!-- INICIO LOOP -->
                <div class="informacoes_evento">
                	<div class="thumb"><?php the_post_thumbnail(); ?></div>
                    <div class="titulo_evento"><?php the_title(); ?></div>
                    <div class="valor"><?php $key="valor_evento"; echo get_post_meta($post->ID,$key,true);?></div>
                    <div class="hora_e_local">04/05/2012 | 18:00 | COPACABANA</div>
                    <div class="descricao_evento"> <?php excerpt(130);?>...[ LEIA + ] </div>
                </div>
    			<!-- FIM LOOP -->
    
               <?php endwhile; else: ?>
               <?php endif;?>

    Agradeço desde já cara! estou com uma dor de cabeça com isso.

    Sicuro, coloque

    <?php $dias = array(); ?>

    logo antes da linha

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

    e logo depois dela, coloque

    <?php
    $estedia = get_the_time('l - d/m/Y'); // pega a data de cada post
    
    if (!in_array($estedia,$dias)) { // confere se já está no array
        echo '<h5>'.$estedia.'</h5>'; // se não estiver, imprime o cabeçalho
        $dias[] = $estedia; // e guarda no array
    }
    ?>

    e você já vai ver o resultado. Aí é só modificar pra ficar do jeito exato que vc quer.

    Criador do tópico Sicuro

    (@sicuro)

    Ricardo, EU TE AMO CARA.

    Serio, muito obrigado mesmo!!!

    Ooops pensei que era para acessar os posts por dia da semana, ex.: posts de segunda, terça etc e acessá-los assim por isso recomendei criar as taxonomias :S

    Eu tava pensando fazer isso também Ricardo.
    Valew pela ajuda.
    Um código tão simples as vezes acaba de dando dór de cabeça.

    Estou tentando usá-lo para listar eventos futuros, mas se a data do evento é o que conta, não faz sentido listar por sua data de publicação. Acabei deixando do jeito que está mas informando o metadado do evento em si.

    Se for usar a data de publicação, teria que mostrar posts que ainda não foram publicados. Isso para quando se publica eventos futuros.

    Criador do tópico Sicuro

    (@sicuro)

    Eu fiz isso Diana, ele lista os eventos que ja ocorreram e ainda vão ocorrer. fiz assim ó:

    <?php $dias = array(); ?>
    
    <?php  query_posts('cat=10&posts_per_page=10&post_status=future,publish' . '&paged='  . $paged); ?>
    
                <?php   if (have_posts()): while (have_posts()): the_post();?>
    
    <?php
    
    $estedia = get_the_time('j \d\e F \d\e Y'); // pega a data de cada post
    
    if (!in_array($estedia,$dias)) { // confere se já está no array
    
        echo '<h5>'.$estedia.'</h5>'; // se não estiver, imprime o cabeçalho
    
        $dias[] = $estedia; // e guarda no array
    
    }
    
    ?>

    Funcionou bonitão, ele lista os eventos agendados e os que foram postados 🙂

    Muito bom! 🙂 Acho que poderia usar um post type para eventos?! Assim poderia listá-lo como um calendário mensal na página de listagem de eventos.

    Muitos falam do http://wordpress.org/extend/plugins/all-in-one-event-calendar/screenshots/ mas parece meio chato de usar/ensinar, se for para usar algo assim prefiro integrar o serviço do Google.

    Eu já usei um código parecido pra fazer listagem de eventos.

    No meu caso, eu criei um post_type para os eventos e nele uma meta-box para inserir as datas e gravar como custom_values. Assim mantenho a data de publicação separada da data do evento, e posso continuar usando rascunhos e agendamentos do jeito “correto”.

    Depois é só usar essa mesma lógica que eu postei acima, mas ao invés de ordenar os posts pela data da publicação e usar get_the_date(), eu ordeno já pelas datas usando meta_key e meta_value na WP_Query e uso get_post_custom_values() para imprimir os cabeçalhos.

    Acabei fazendo meu próprio plugin de eventos, pra não ficar com as soluções pesadas que tem no repositório. Estou até pensando em lançar, mas cadê tempo pra adequar aos padrões?

Visualizando 15 respostas - 1 até 15 (de um total de 16)
  • O tópico ‘Post exibidos de acordo com o dia da semana’ está fechado para novas respostas.