wenn der Beitrag Inhalt hat

9

Ich richte eine einseitige WordPress-Site ein. Ich erhalte einige Seiten auf meiner Website, die keinen Inhalt enthalten. Zum Beispiel bekomme ich die leere Blog-Seite sowie die Blog-Vorlage. Also dachte ich, ich könnte einen Scheck einwerfen, um zu sehen, ob die Seite Inhalt hat und ob sie diese Informationen veröffentlicht. Ich habe Probleme, es zum Laufen zu bringen. Ich verwende eine benutzerdefinierte Abfrage für die Homepage. Also dachte ich, ich könnte das tun

 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;

Das Problem ist, dass ich einen Fehler in diesem Code bekomme und nicht herausfinden kann, warum. Ich bekomme diesen Fehler

Hinweis: Undefinierte Eigenschaft: WP_Query :: $ post_content in

Jamie
quelle

Antworten:

14

Der Inhalt ist eine Eigenschaft des postObjekts, nicht des Abfrageobjekts.

Verwenden Sie $postoder get_post()stattdessen:

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

Wie wäre es mit

if ( !empty( get_the_content() ) ){ 
//code 
}
Juan Solano
quelle
Sie können eine Funktion nicht empty()als Variable übergeben. Sie müssen es zuerst in einer Variablen speichern. Selbst dann funktioniert es nicht, da Ihr Inhalt möglicherweise einige Leerzeichen enthält.
Jack Johansson
1
Das funktioniert bei mir! bist du sicher? Zumindest in PHP 7
Juan Solano
2

Dies funktioniert auch und testet auf Dinge wie leere Absatz-Tags oder  den Inhalt, die dazu führen können, dass eine normale Prüfung fehlschlägt. Die ursprüngliche Idee finden Sie unter http://blog.room34.com/archives/5360 . Nehmen Sie sie einfach hier auf, damit ich sie wiederfinden kann. :Ö)

Fügen Sie dies in Ihre functions.php ein:

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

Und platzieren Sie dies dort, wo Sie die Prüfung ausführen möchten:

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

Das wird zurückgegeben, truewenn der Inhalt leer ist, falsewenn nicht.

Michelle
quelle
1

Ich habe einige "has_content ()" - Methoden seit mehreren Jahren implementiert und es gibt immer genug Zeit dazwischen, so dass ich noch einmal ein bisschen suchen muss, um diese Frage zu beantworten.

sowieso - das ist meine Lösung, die ich beim nächsten Mal gerne hier finde - also als Referenz.

Alle "Inside Loop" -Funktionen können durch Post-Objekte "post_content" ersetzt werden.

in functions.php und ähnlichen Dateien:

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

als Funktion

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

Vorlage innerhalb der Schleife:

<?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 } ?>
Thomas Fellinger
quelle
Dies ist das zweite Mal, dass ich dies konsultiere. Ich werde jedes Mal einen Kommentar hinterlassen, wenn ich zu statistischen Zwecken zurückkomme
Thomas Fellinger