se o get_posts não tiver post
-
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; ?>
-
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; ?>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á. 😉
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') ?> / <?php the_category(', ') ?> / <?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.
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.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') ?> / <?php the_category(', ') ?> / <?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.
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') ?> / <?php the_category(', ') ?> / <?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?
É 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.
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.
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') ?> / <?php the_category(', ') ?> / <?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; ?>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
O tópico ‘se o get_posts não tiver post’ está fechado para novas respostas.