• Resolvido Fernando

    (@baykal)


    Pessoal,

    Tudo bem?

    O tema que eu estou usando utilizava query_posts para mostrar os posts, mas essa função estava causando conflito com os títulos da página que o All in One SEO alterava.

    Troquei o query_posts por get_posts. Beleza, tudo funcionando.

    Só que agora não sei fazer o WordPress exibir uma mensagem quando o get_posts não achar nenhum post.

    O código que estou usando é esse:

    <?php
    global $post;
    $args = array( ‘numberposts’ => 2, ‘category’ => 6 );
    $myposts = get_posts( $args );
    foreach( $myposts as $post ) : setup_postdata($post); ?>
    <div class=”one_third”>
    <h3><?php the_title(); ?></h3>

    <?php
    if(has_post_thumbnail()) {
    $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), ‘single-post-thumbnail’ );
    } else {
    $image[0] = get_template_directory_uri() . ‘/images/defaultImagePost.jpg’;
    }
    ?>

    <div class=”imgHover”><div class=”hover”>“><img src=”<?php echo get_template_directory_uri(); ?>/images/view.png” alt=”” /></div><img class=”border” src=”<?php echo get_template_directory_uri(); ?>/thumb.php?src=<?php echo $image[0]; ?>&h=115&w=288&q=100″ width=”288″ alt=”” /></div>
    <?php the_excerpt(); ?>
    </div>
    <?php endforeach; ?>

Visualizando 15 respostas - 1 até 15 (de um total de 26)
  • Não sei se entendi direito, mas veja se isso resolve o seu problema.

    <?php
    global $post;
    $args = array( 'numberposts' => 2, 'category' => 6 );
    $myposts = get_posts( $args );
    if(!empty($myposts)):
    foreach( $myposts as $post ) : setup_postdata($post); ?>
    <div class="one_third">
    <h3><?php the_title(); ?></h3>
    
    <?php
    if(has_post_thumbnail()) {
    $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'single-post-thumbnail' );
    } else {
    $image[0] = get_template_directory_uri() . '/images/defaultImagePost.jpg';
    }
    endif;
    ?>
    Criador do tópico Fernando

    (@baykal)

    Myst1010…

    Na verdade eu quero o mesmo que o código abaixo, só que com get_posts:

    <?php
    query_posts('category_name=home&posts_per_page=2');
    if (have_posts()) : while (have_posts()) : the_post();
    ?><div class="one_third">
                <h3><?php the_title(); ?></h3>
    
                <?php
                   if(has_post_thumbnail()) {
                      $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'single-post-thumbnail' );
                   } else {
                      $image[0] = get_template_directory_uri() . '/images/defaultImagePost.jpg';
                   }
                ?>
    
                <div class="imgHover"><div class="hover"><a href="<?php echo get_permalink() ?>"><img src="<?php echo get_template_directory_uri(); ?>/images/view.png" alt="" /></a></div><img class="border" src="<?php echo get_template_directory_uri(); ?>/thumb.php?src=<?php echo $image[0]; ?>&h=115&w=288&q=100" width="288" alt="" /></div>
    
                <?php the_excerpt(); ?>
            </div>
            <?php endwhile; ?>
            <?php else: ?>
                        <p><?php _e("Desculpe, nenhum post corresponde aos seus critérios.","arclite"); ?></p>
                    <?php endif; ?>

    Esse código em query_posts tráz os posts e caso não tenha nenhum ele mostra a mensagem (Desculpe, nenhum post corresponde aos seus critérios.) Queria fazer esse IF / ELSE com o get_posts.

    Sabe como faz?

    Brigadão… agradeço desde já. 😉

    Criador do tópico Fernando

    (@baykal)

    Consegui… tinha que usar a função have_posts() .

    Tudo certo agora:

    <?php
    if ( have_posts() ) :
    	while ( have_posts() ) : the_post();
    $query_string = "paged=$paged";
    $myposts = get_posts( $query_string );
    foreach( $myposts as $post ) :	setup_postdata($post);
    ?>
                <h4><?php the_title(); ?></h4>
                <em style="font-size:11px;">Por <a href="#"><?php the_author_posts_link(); ?></a> em <?php the_time('F jS') ?>   &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;   <?php the_category(', ') ?>   &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;   <?php comments_popup_link('0 comentrios', '1 comentrio', '% comentrios'); ?></em>
                <div class="space"></div>
    
                <?php the_excerpt(); ?><p><a href="<?php echo get_permalink() ?>">Leia mais »</a></p><div class="clear"></div><div class="sep"></div>
    <?php endforeach;
    endwhile;
    else :
    	echo wpautop( 'Sorry, no posts were found' );
    endif;
    ?>

    Obrigado

    Tá ai

    <?php
    global $post;
    $args = array( 'numberposts' => 2, 'category' => 6 );
    $myposts = get_posts( $args );
    
    if(!empty($myposts)):  //Verifica se existe posts a serem exibidos
    foreach( $myposts as $post ) : setup_postdata($post); ?>
    
    	<div class="one_third">
    		<h3><?php the_title(); ?></h3>
    
    		<?php
    		   if(has_post_thumbnail()) {
    			  $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'single-post-thumbnail' );
    		   } else {
    			  $image[0] = get_template_directory_uri() . '/images/defaultImagePost.jpg';
    		   }
    		?>
    
    		<div class="imgHover"><div class="hover"><a href="<?php echo get_permalink() ?>"><img src="<?php echo get_template_directory_uri(); ?>/images/view.png" alt="" /></a></div><img class="border" src="<?php echo get_template_directory_uri(); ?>/thumb.php?src=<?php echo $image[0]; ?>&h=115&w=288&q=100" width="288" alt="" /></div>
    
    		<?php the_excerpt(); ?>
    	</div>
    
    <?php endforeach; ?>
    <?php else: ?>
    
    	<p><?php _e("Desculpe, nenhum post corresponde aos seus critérios.","arclite"); ?></p>
    
    <?php endif; ?>

    Da forma que vc fez está usando um loop e mais um foreach, usando duas coisas para fazer uma.

    Enquanto vc estava tesando eu estava preparando a modificação que tinha me pedido, veja se ela está funcionando como vc quer, pois ela só está usando um foreach e consequentemente fica mais leve do que usar um loop extra.

    Criador do tópico Fernando

    (@baykal)

    Myst1010..

    Funcionou aqui não… ele não exibe a mensagem e trás os posts mesmo sem ter o resultado que eu pesquisei

    Aqui pelo menos nos meus teste, se eu uso um número ID de uma categoria que existe o código retorna os posts desta categoria.

    Se eu colocar um ID de uma categoria que não existe (Número falso) me retorna a mensagem.

    Verifique algumas coisas.
    Vc está configurando o número ID correto?

    Está colocando este código junto com outro loop?
    Se estiver use wp_reset_query(); no final do seu loop anterior a este código.

    Criador do tópico Fernando

    (@baykal)

    Coloquei seu código assim (modificando ele pra trazer $query_string = “paged=$paged”;):

    <?php
    $query_string = "paged=$paged";
    $myposts = get_posts( $query_string );
    if(!empty($myposts)):  //Verifica se existe posts a serem exibidos
    foreach( $myposts as $post ) : setup_postdata($post); ?>
    
                <h4><?php the_title(); ?></h4>
                <em style="font-size:11px;">Por <a href="#"><?php the_author_posts_link(); ?></a> em <?php the_time('F jS') ?>   &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;   <?php the_category(', ') ?>   &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;   <?php comments_popup_link('0 comentrios', '1 comentrio', '% comentrios'); ?></em>
                <div class="space"></div>
    
                <?php the_excerpt(); ?><p><a href="<?php echo get_permalink() ?>" class="linkLeiaMais">Leia mais »</a></p><div class="clear"></div><div class="sep"></div>
    <?php endforeach; ?>
    <?php else: ?>
    
    	<p><?php _e("Desculpe, nenhum post corresponde aos seus critérios.","arclite"); ?></p>
    
    <?php endif; ?>

    Em cima desse código tem o seguinte código (coloquei o wp_reset_query como sugeriu):

    <h6>Mostrando <?php $num = $wp_query->post_count; if (have_posts()) : echo $num; endif;?> de <?php $search_count = 0; $search = new WP_Query("s=$s & showposts=-1"); if($search->have_posts()) : while($search->have_posts()) : $search->the_post(); $search_count++; endwhile; endif; echo $search_count; wp_reset_query();?> resultados encontrados </h6>

    Usando seu código, se eu pesquiso uma palavra que não existe, ele me retorna váios posts e esse script em cima diz que teve 0 resultados encontrados.

    Criador do tópico Fernando

    (@baykal)

    O estranho é que mesmo com meu código:

    <?php
    if ( have_posts() ) :
    	while ( have_posts() ) : the_post();
    $query_string = "paged=$paged";
    $myposts = get_posts( $query_string );
    foreach( $myposts as $post ) :	setup_postdata($post);
    ?>
                <h4><?php the_title(); ?></h4>
                <em style="font-size:11px;">Por <a href="#"><?php the_author_posts_link(); ?></a> em <?php the_time('F jS') ?>   &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;   <?php the_category(', ') ?>   &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;   <?php comments_popup_link('0 comentrios', '1 comentrio', '% comentrios'); ?></em>
                <div class="space"></div>
    
                <?php the_excerpt(); ?><p><a href="<?php echo get_permalink() ?>" class="linkLeiaMais">Leia mais »</a></p><div class="clear"></div><div class="sep"></div>
    <?php endforeach;
    endwhile;
    else :
    	echo wpautop( 'Desculpe, nenhum post corresponde aos seus critérios.' );
    endif;
    ?>

    Se eu pesquiso uma palavra que tenha só 4 vezes nos posts, o script:

    <h6>Mostrando <?php $num = $wp_query->post_count; if (have_posts()) : echo $num; endif;?> de <?php $search_count = 0; $search = new WP_Query("s=$s & showposts=-1"); if($search->have_posts()) : while($search->have_posts()) : $search->the_post(); $search_count++; endwhile; endif; echo $search_count; wp_reset_query();?> resultados encontrados </h6>

    me diz que possui 4 resultados encontrados e na página me mostra vários posts e não somente os 4 encontrados.

    Sabe o que pode ser isso?

    Pera ai, esse código que vc está tentando modificar é página de busca?

    Criador do tópico Fernando

    (@baykal)

    É sim…

    Na verdade estou usando ele no search.php, tag.php e category.php

    Aquele primeiro código que mandei que possui o thumbnail e seleção de categoria é da home.

    Vamos por partes, para a página de busca não se deve fazer modificações direto na página, as modificações precisam ser internas antes que os posts sejam buscados e não depois.

    Aqui vc pode ver como modificar um pouca a busca sem causar um monde de problemas deste tipo que vc está tendo.
    http://webotera.com/tutoriais-e-dicas/como-remover-categorias-da-busca/

    se nas páginas categoria e tags não possui outro loop a função que mostro neste artigo pode ser modificada e usada também para elas, mas caso tenha mais loops vc deve fazer um wp_reset_query() no primeiro loop e adicionar seu segundo loop.

    De preferência use WP_Query para causar menos problema com paginação.

    Se ainda sim ficar dando problema desative os plugin para ver se eles estão modificando suas alterações e é por isso que elas não estão funcionando como deviam.

    Criador do tópico Fernando

    (@baykal)

    Myst1010

    Mas na busca eu não quero remover nenhuma categoria não.

    Só na home que o get_posts trás só uma categoria.

    O problema que tá ocorrendo é que o get_posts está trazendo resultados de pesquisa sem ter resultados e em outros casos trazendo mais resultados do que deveria ter.

    Criador do tópico Fernando

    (@baykal)

    O código original da busca era esse, com query_posts:

    <?php
    $query_string = "paged=$paged";
    query_posts($query_string);
    if (have_posts()) : while (have_posts()) : the_post();
    ?>
    
                <h4><?php the_title(); ?></h4>
                <em style="font-size:11px;">Por <a href="#"><?php the_author_posts_link(); ?></a> em <?php the_time('F jS') ?>   &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;   <?php the_category(', ') ?>   &nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;   <?php comments_popup_link('0 comentrios', '1 comentrio', '% comentrios'); ?></em>
                <div class="space"></div>
    
                <?php the_excerpt(); ?><p><a href="<?php echo get_permalink() ?>">Leia mais »</a></p><div class="clear"></div><div class="sep"></div>
    <?php endwhile; ?>
            <?php else: ?>
                        <p><?php _e("Desculpe, nenhum post corresponde aos seus critrios.","arclite"); ?></p>
                    <?php endif; ?>
    Criador do tópico Fernando

    (@baykal)

    Na página de busca… o que estava causando o problema dos posts era isso:

    $query_string = "paged=$paged";
    query_posts($query_string);

    Não lembro de onde tirei isso! rs

Visualizando 15 respostas - 1 até 15 (de um total de 26)

O tópico ‘se o get_posts não tiver post’ está fechado para novas respostas.