Suporte » Desenvolvendo com WordPress » Como não exibir conteúdo quando não houverem posts

  • Resolvido Filipe Coutinho

    (@zetaprime)


    Pessoal estou com o seguinte problema, estou dando executando 2 query_posts, um abaixo do outro, mas eu quero exibir somente o conteúdo daquele que apresentar posts, haveria algum comando que me perimitisse isto?

Visualizando 9 respostas - 1 até 9 (de um total de 9)
  • faça um if : else no começo, tipo:

    $queryA = new WP_Query($argsA);
    $queryB = new WP_Query($argsB);
    
    if ($queryA->have_posts()) {
        // seu código p/ query A
    } elseif ($queryB->have_posts()) {
        // código para query B
    }

    Não é boa idéia usar 2 x query_posts() na mesma página. Veja na documentação.

    Se você precisa executar vários loops, crie uma nova instância da classe WP_Query para cada um, e separe os loops usando wp_reset_query() pra não rolar confusão.

    po cara não consegui fazer deste modo, não estou conseguindo estruturar…

    O que acontece é o seguinte, eu estou montando um sistema de pesquisa com um plugin e preciso que no resultado de uma pesquisa específica apareça apenas um form que é da pesquisa específica, mas está aparecendo os dois.

    estou usando

    <?php query_posts(‘category_name=lojas&orderby=title&order=asc&showposts=500’); ?>

    e

    <?php query_posts(‘category_name=gastronomia&orderby=title&order=asc&showposts=100’); ?>

    sendo que eu queria que mostasse apenas o primeiro ou o segundo por vez, estou editando o search.php

    zetaprime, vc chegou a construir a função que determina qual form vai aparecer?

    As duas queries que vc postou só estão buscando no bd o que parece ser o resultado da sua pesquisa. Por elas mesmas, nada aparece na página. Depois dele tem que vir o loop – while(have_posts()) : the_post() – e junto com ele a função que determina qual resultado vai aparecer, como no exemplo q eu postei.

    Amigão eu coloquei o código assim no loop.php:

    <?php
       $queryA = new WP_Query(category_name=lojas&orderby=title&order=asc&showposts=500);
       $queryB = new WP_Query(category_name=gastronomia&orderby=title&order=asc&showposts=100);
    
    if ($queryA->have_posts()) {
      <?php if(function_exists('wp_custom_fields_search'))   wp_custom_fields_search(); ?>
    
    <li>
         <span class="nome"><?php the_title(); ?></span>
         <span class="end"><?php echo get('endereco'); ?></span>
         <span class="tel"><?php echo get('telefone'); ?></span>
      </li>
    } elseif ($queryB->have_posts()) {
      <?php if(function_exists('wp_custom_fields_search')) wp_custom_fields_search(); ?>
    
    <li>
          <span class="nome"><?php the_title(); ?></span>
          <span class="end"><?php echo get('endereco'); ?></span>
          <span class="tel"><?php echo get('telefone'); ?></span>
      </li>
    }
    ?>

    Está apresentando um erro de sintaxe, o que estaria errado?

    Talvez aqui:

    <?php if(function_exists('wp_custom_fields_search')) wp_custom_fields_search(); ?>

    deve ser

    <?php if(function_exists('wp_custom_fields_search')) { wp_custom_fields_search(); } ?>

    ?

    <?php
    		$queryA = new WP_Query('category_name=lojas');
    		$queryB = new WP_Query('category_name=gastronomia');
    
    		if ($queryA->have_posts()) {
    			if(function_exists('wp_custom_fields_search')) wp_custom_fields_search();
    			echo '<li>';
    			echo '<span class="nome">';
    			the_title();
    			echo '</span>';
    			echo '<span class="end">';
    			echo get('endereco');
    			echo '</span>';
    			echo '<span class="tel">';
    			echo get('telefone');
    			echo '</span>';
    			echo '</li>';
    		} elseif ($queryB->have_posts()) {
    			if(function_exists('wp_custom_fields_search')) wp_custom_fields_search('preset-1');
    			echo '<li>';
    			echo '<span class="nome">';
    			the_title();
    			echo '</span>';
    			echo '<span class="end">';
    			echo get('endereco');
    			echo '</span>';
    			echo '<span class="tel">';
    			echo get('telefone');
    			echo '</span>';
    			echo '</li>';
    		}		
    
    	?>

    Deste modo exibe todos os posts mas o formulário é apresentado em cada li, e eu queria que exibisse somente uma vez, você saberia como fazer isto?

    Cara, to confuso… haha.

    Essa parte se refere ao formulário, certo?

    echo '<li>';
    			echo '<span class="nome">';
    			the_title();
    			echo '</span>';
    			echo '<span class="end">';
    			echo get('endereco');
    			echo '</span>';
    			echo '<span class="tel">';
    			echo get('telefone');
    			echo '</span>';
    			echo '</li>';

    se vc precisa que the_title() seja referência ao primeiro resultado da query, então ele tem que estar dentro do loop, tipo:

    <?
    if ($queryA->have_posts()) :
    
    	// aqui tudo para ser executado antes de qualquer resultado da $queryA, caso esta tenha posts
    
    	while($queryA->have_posts()) : $queryA->the_post();
    
    		// a partir daqui, todas as referências são em relação ao post atual da $queryA
    
    		if(function_exists('wp_custom_fields_search') &&  $current_post == 0) : 
    
    		wp_custom_fields_search();
    
    		// etc, aqui entra todo o código que vc quer para o primeiro resultado da $queryA, caso a função esteja disponível
    
    		else :
    
    		// aqui todo o código para os outros resultados da $queryA, e para todos caso a função não esteja disponível
    
    		endif;
    
    	endwhile;
    
    	// aqui tudo para ser executado depois do último resultado da $queryA
    
    endif;
    
    // aqui tudo para ser executado caso $queryA não tenha posts.
    ?>

    Amigão executando seu código, os resultados não aparecem certos, e tabém o form continua aparecendo acima de cada resuldado, infelizmente…

    Sempre que eu executo um while acontece esse problema, ele exibe uma quantidade pequena de posts que se repetem uma pancada de vezes =(

    Quando eu executo o código que eu lhe enviei acima o resultados aparecer certinhos, e outra coisa essa função if(function_exists('wp_custom_fields_search')) wp_custom_fields_search(); é somente para me retornar um formulário e nada mais 😉

    CONSEGUI MEU PARCEIRO

    <?php
    		$queryA = new WP_Query(array ( 'orderby' => 'title', 'order' => 'ASC', 'category_name' => 'lojas', 'showposts' => '500' ));
    		$queryB = new WP_Query(array ( 'orderby' => 'title', 'order' => 'ASC', 'category_name' => 'gastronomia', 'showposts' => '100'  ));
    
    		if ($queryA->have_posts()) {
    			if(function_exists('wp_custom_fields_search')) wp_custom_fields_search();
    			while($queryA->have_posts()) : $queryA->the_post();
    				echo '<li>';
    				echo '<span class="nome">';
    				the_title();
    				echo '</span>';
    				echo '<span class="end">';
    				echo get('endereco');
    				echo '</span>';
    				echo '<span class="tel">';
    				echo get('telefone');
    				echo '</span>';
    				echo '</li>';
    			endwhile;
    		} elseif ($queryB->have_posts()) {
    			if(function_exists('wp_custom_fields_search')) wp_custom_fields_search('preset-1');
    			while($queryB->have_posts()) : $queryB->the_post();
    				echo '<li>';
    				echo '<span class="nome">';
    				the_title();
    				echo '</span>';
    				echo '<span class="end">';
    				echo get('endereco');
    				echo '</span>';
    				echo '<span class="tel">';
    				echo get('telefone');
    				echo '</span>';
    				echo '</li>';
    			endwhile;
    		}

    Mas infelzmente aparecem resultados repetidos… namoral tá brabo

Visualizando 9 respostas - 1 até 9 (de um total de 9)
  • O tópico ‘Como não exibir conteúdo quando não houverem posts’ está fechado para novas respostas.