se il post ha contenuto


9

Sto creando un sito WordPress di una pagina. Ricevo alcune pagine elencate nel mio sito che non hanno contenuti. Ad esempio, otterrò la pagina del blog vuota e il modello del blog. Quindi ho pensato di poter dare un segno di spunta per vedere se la pagina ha contenuti e se continua e pubblica tali informazioni. Ho problemi a farlo funzionare. Sto usando una query personalizzata per la homepage. Quindi ho pensato di poterlo fare

 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;

il problema è che ricevo un errore su quel codice e non riesco a capire perché. Ottengo questo errore

Avviso: proprietà non definita: WP_Query :: $ post_content in

Risposte:


14

Il contenuto è una proprietà postdell'oggetto, non dell'oggetto query.

Usa $posto get_post()invece:

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

3

Che dire

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

Non è possibile passare una funzione a empty()come variabile. Devi prima memorizzarlo in una variabile. Anche allora, non funzionerà, poiché potrebbero esserci degli spazi vuoti nei tuoi contenuti.
Jack Johansson

1
Questo funziona per me! sei sicuro? Almeno in PHP 7
Juan Solano,

2

Funziona anche e verifica cose come tag di paragrafo vuoti o  nel contenuto che potrebbero causare il fallimento di un normale controllo. Vedere http://blog.room34.com/archives/5360 per l'idea originale: è sufficiente registrarlo qui per poterlo trovare di nuovo. : O)

Inseriscilo nelle tue funzioni.php:

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

E metti questo dove vuoi eseguire il controllo:

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

Ciò restituirà truese il contenuto è vuoto, in falsecaso contrario.


1

ho implementato alcuni metodi "has_content ()" per diverse volte nel corso degli anni e c'è sempre abbastanza tempo tra loro, quindi devo cercare ancora un po 'per rispondere a questa domanda.

comunque - questa è la mia soluzione, che mi piace trovare la prossima volta qui - quindi è per riferimento.

tutte le funzioni "dentro il ciclo" possono essere sostituite da oggetti post "post_content"

in Functions.php e file simili:

// 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;
}

come funzione

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

modello all'interno del ciclo:

<?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 } ?>

questa è la seconda volta che lo consulto, lascerò un commento ogni volta che torno a fini statistici
Thomas Fellinger
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.