se il post ha contenuto

6 nov 2013, 02:50:05
Visualizzazioni: 59.7K
Voti: 12

Sto configurando un sito WordPress one-page. Sto ottenendo alcune pagine elencate nel mio sito che non hanno contenuto. Ad esempio, ottengo la pagina del blog vuota e il template del blog. Quindi ho pensato di inserire un controllo per verificare se la pagina ha contenuto e in caso affermativo procedere con la pubblicazione di quelle informazioni. Sto avendo problemi a farlo funzionare. Sto usando una query personalizzata per la homepage. Quindi ho pensato di fare questo

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 ottengo un errore su quel codice e non riesco a capire perché. Ottengo questo errore

Notice: Undefined property: WP_Query::$post_content in

0
Tutte le risposte alla domanda 4
0
24

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

Utilizza $post o get_post() invece:

if( '' !== get_post()->post_content ) {
// fai qualcosa
}
6 nov 2013 03:03:26
3

E se invece

if ( !empty( get_the_content() ) ){ 
//codice 
}
10 set 2017 19:18:33
Commenti

Non puoi passare una funzione a empty() come variabile. Devi prima memorizzarla in una variabile. Anche in quel caso, non funzionerà, poiché potrebbero esserci alcuni spazi vuoti nel tuo contenuto.

Johansson Johansson
10 set 2017 23:14:57

Questo funziona per me! sei sicuro? Almeno in PHP 7

Juan Solano Juan Solano
11 set 2017 11:04:20

@Johansson Non sono sicuro da dove l'hai preso o se mi sfugge qualcosa, ma ovviamente puoi, perché get_the_content() restituisce una stringa che potrebbe essere vuota o meno. Da non confondere con the_content(), che invece visualizza una stringa.

Gerard Reches Gerard Reches
3 apr 2024 11:22:11
5

Ho implementato alcuni metodi "has_content()" diverse volte negli anni e c'è sempre abbastanza tempo tra un'implementazione e l'altra, quindi devo ricercare un po' per rispondere a questa domanda.

In ogni caso - questa è la mia soluzione, che vorrei trovare la prossima volta qui - quindi è per riferimento.

Tutte le funzioni "all'interno del loop" possono essere sostituite dalla proprietà "post_content" di un oggetto post.

In functions.php e file simili:

// scrivi all'interno del loop
$the_content = apply_filters('the_content', get_the_content());
if ( !empty($the_content) ) {
  echo $the_content;
}
// con oggetto post tramite id
$post = get_post(12); // post specifico
$the_content = apply_filters('the_content', $post->post_content);
if ( !empty($the_content) ) {
  echo $the_content;
}

Come funzione

// chiamata all'interno del loop
function mytheme_has_content(){
  return !empty(apply_filters('the_content', get_the_content()));
}

Template all'interno del 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 } ?>
11 lug 2019 11:23:11
Commenti

questa è la seconda volta che consulto questo, lascerò un commento ogni volta che torno per scopi statistici

Thomas Fellinger Thomas Fellinger
10 mar 2020 09:59:59

terza volta qui

Thomas Fellinger Thomas Fellinger
19 ago 2020 08:52:43

quarta volta, ora è il 2020

Thomas Fellinger Thomas Fellinger
18 ott 2020 13:28:40

Il 5° posto nel 2021 sembra essere una volta all'anno

Thomas Fellinger Thomas Fellinger
23 mar 2021 17:45:58

Di nuovo 6° nel 2021...

Thomas Fellinger Thomas Fellinger
26 nov 2021 11:03:05
0

Anche questo funziona, e verifica elementi come paragrafi vuoti o &nbsp; nel contenuto che potrebbero far fallire un controllo normale. Vedi http://blog.room34.com/archives/5360 per l'idea originale - lo registro qui solo per poterlo ritrovare in futuro. :O)

Inserisci questo nel tuo functions.php:

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

E inserisci questo dove vuoi eseguire il controllo:

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

Questo restituirà true se il contenuto è vuoto, false se non lo è.

1 dic 2015 18:33:31