se a postagem tiver conteúdo


9

Estou configurando um site WordPress de uma página. Estou recebendo algumas páginas listadas no meu site que não têm conteúdo. Por exemplo, receberei a página do blog vazia e o modelo do blog. Por isso, pensei em fazer uma verificação para ver se a página tem conteúdo e se ela segue adiante e publica essas informações. Estou tendo problemas para fazê-lo funcionar. Estou usando uma consulta personalizada para a página inicial. Então eu pensei que poderia fazer isso

 if ( $page_query->have_posts() ) : while ( $page_query->have_posts() ) : $page_query->the_post();
 if( $page_query->post_content != ''){
       get_template_part( 'content', get_post_format() );
 }
 endwhile; endif;

O problema é que recebo um erro nesse código e não consigo descobrir o porquê. Eu recebo este erro

Aviso: Propriedade indefinida: WP_Query :: $ post_content in

Respostas:


14

O conteúdo é uma propriedade do postobjeto, não do objeto de consulta.

Use $postou em get_post()vez disso:

if( '' !== get_post()->post_content ) {
// do something
}

3

A respeito

if ( !empty( get_the_content() ) ){ 
//code 
}

Você não pode passar uma função para empty()como uma variável. Você deve primeiro armazená-lo em uma variável. Mesmo assim, não funcionará, pois pode haver alguns espaços vazios no seu conteúdo.
Jack Johansson

1
Isso está funcionando para mim! você tem certeza? Pelo menos no PHP 7
Juan Solano

2

Isso também funciona e testa itens como tags de parágrafos vazios ou  conteúdo que pode causar falha na verificação normal. Veja http://blog.room34.com/archives/5360 para obter a ideia original - basta gravá-la aqui para que eu possa encontrá-la novamente. : O)

Coloque isso em seu functions.php:

function empty_content($str) {
    return trim(str_replace(' ','',strip_tags($str))) == '';
}

E coloque isso onde você deseja executar a verificação:

if (function_exists('empty_content') && empty_content($post->post_content)) { ... }

Isso retornará truese o conteúdo estiver vazio, falsese não estiver.


1

Eu implementei alguns métodos "has_content ()" por várias vezes ao longo dos anos e sempre há tempo suficiente entre eles, então eu preciso procurar novamente um pouco para responder a esta pergunta.

de qualquer forma - esta é a minha solução, que eu gostaria de encontrar da próxima vez aqui - então é para referência.

todas as funções "loop interno" podem ser substituídas por objetos post "post_content"

em functions.php e arquivos similares:

// write inside the loop
$the_content = apply_filters('the_content', get_the_content());
if ( !empty($the_content) ) {
  echo $the_content;
}
// with post object by id
$post = get_post(12); // specific post
$the_content = apply_filters('the_content', $post->post_content);
if ( !empty($the_content) ) {
  echo $the_content;
}

como função

// call inside the loop
function mytheme_has_content(){
  return !empty(apply_filters('the_content', get_the_content()));
}

modelo dentro do loop:

<?php if ( $customQuery->have_posts() ) {?>
  <?php while ( $customQuery->have_posts() ) {
    $customQuery->the_post(); ?>
    <?php $the_content = apply_filters('the_content', get_the_content()); ?>
    <!-- html -->
    <?php if ( !empty($the_content) ) { ?>
      <div class="content">
        <?php echo $the_content; ?>
      </div>
    <?php } ?>
  <?php } ?>
  <?php wp_reset_postdata(); ?>
<?php } ?>

esta é a segunda vez que eu consulto isso, vou deixar um comentário toda vez que volto para fins estatísticos
Thomas Fellinger 10/03
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.