Das Testen des Posttitels in der ‘if / else’ statement gibt keinen Inhalt zurück

Ich teste für einen bestimmten festen Post auf einer About-Seite, ich vermutete, dass der beste Weg ist, nach Post-Titel (?) Zu testen.

Hier ist mein Code, was läuft falsch?

post_title); $posts = get_posts ("cat=$cat&showposts=35"); if ($posts) { foreach ($posts as $post): setup_postdata($post); ?> 

post_title('skillset')) { echo '
'; the_content(''); echo '
'; } else{ the_content(''); } endforeach; } } ?>

Solutions Collecting From Web of "Das Testen des Posttitels in der ‘if / else’ statement gibt keinen Inhalt zurück"

Zunächst einmal ist $post eine der globalen corevariablen von WordPress und sollte nach Ihrer foreach Schleife entweder nicht berührt oder zurückgesetzt werden .

Mit setup_postdata() können Sie Template-Tags verwenden, wie Sie es im obigen Snippet mit the_title() . Es oder die Schleife, in der es verwendet wird, sollte jedoch immer von seinem Begleiter wp_reset_postdata() gefolgt werden.

Auch $post ist ein Objekt . Objekte sind Instanzen von classn, die Eigenschaften und / oder Methoden enthalten, die OOP-Äquivalente von Variablen und functionen.

Indem du versuchst, den Post-Titel auf die Art und Weise zu testen,

if($post->post_title('skillset'))

Sie haben post_title so behandelt, als ob es eine Methode wäre, und Sie könnten den betreffenden Titel als Argument post_title und einen booleschen Wert zurückgeben. Es ist jedoch eine Eigenschaft und enthält als solche einen Wert, auf den Sie zugreifen können – und das ist es.

Dieser Wert muss dann gegen einen anderen Wert getestet werden. Daher

 if( 'skillset' === $post->post_title ) { // your conditional operation } 

wäre ein Arbeitstest für den Titel.

Im Wesentlichen ist diese Zeile die Antwort auf die Frage in Ihrem Titel. Da Sie jedoch gefragt haben, was mit Ihrem Code möglicherweise nicht in Ordnung ist, ist auch das Argument showposts für eine Weile veraltet. Verwenden numberposts stattdessen numberposts .

Lassen Sie uns auch den Ausgangspunkt bei der Verwendung von $post . Wenn Sie anstelle der Template-Tags direkt auf die Eigenschaften verweisen würden, wäre es nicht notwendig, den globalen $post -Post zu überschreiben.

 $wpse67413_posts = get_posts(); foreach( $wpse67413_posts as $wpse67413_post ) { echo '

' . $wpse67413_post->post_title . '

'; }

Würde genauso gut funktionieren, ohne das Globale zu berühren. Das nur der Vollständigkeit halber.

Und als Randnotiz, warum würden Sie so viele öffnende und schließende Tags von PHP auf so wenig Raum verwenden? So ziemlich eine rhetorische Frage: Es macht einfach keinen Sinn.

Bist du dir sicher, dass du das tun willst:

$cat=get_cat_ID($post->post_title);

? Dies ist nur sinnvoll, wenn Sie Beiträge einer Kategorie abrufen möchten, die genauso benannt ist wie der Titel der Seite, auf der sich der Besucher befindet. Angenommen, die Antwort ist positiv, hier ist die vollständige Korrektur Ihres obigen Snippets:

 global $post; if( is_page() ) { $wpse67413_posts = get_posts( array( cat => get_cat_ID($post->post_title), numberposts => 35 )); if( $wpse67413_posts ) { foreach ( $wpse67413_posts as $post ) { setup_postdata($post); echo '
' . '

' get_the_title() . '

' . '
'; if( 'skillset' === $post->post_title ) { echo '
' . get_the_content() . '
'; } else { the_content(); } } } wp_reset_postdata(); }

Der beste Weg wäre, nach ID zu suchen, nicht nach Titel! Also dann wäre dein wenn:

 if ($post->ID === 123) 

Dabei steht 123 für die ID des Posts, den Sie filtern möchten.