WP_Query einfrieren

Ich bin also auf eine Reihe ähnlicher Fragen zu SO gestoßen, aber mein Verständnis von wp_query und fortgeschrittenem PHP ist begrenzt. Ich glaube, ich verliere mich in den PHP-Objekten / Arrays und der Verwendung von get_the_ und the_ functionen. Der Code ist in (das Roots-Thema entspricht) funtions.php.

Ich versuche zu debuggen, während ich var_dump und ChromePhp benutze, aber oft stürzt meine Seite einfach ab oder friert ein, wenn ich das versuche.

 function tags() { // If current post has tags if (get_the_tags()) { $post_id = get_the_id(); $posttags = get_the_tags(); // Loop for each tag the custom post has foreach($posttags as $tag) { $tag_name = ($tag->slug); // Search for posts with the same tag, // is a custom type and don't return // the current post $args = array( 'post_type' => 'custom_post', 'tag' => $tag_name, 'post__not_in' => array( $post_id ) ); $query = new WP_Query( $args ); // Make sure we got results if( $query->have_posts() ) { // Loop through each returned post while ( $query->have_posts() ) { $query->the_post(); // Returns null ...other things generally lock up the page... $example = ($query->posts[0]); // Crashes the server } } wp_reset_postdata(); } } } add_shortcode('shortcodetag', 'tags'); 

So scheint das zu einem gewissen Punkt zu funktionieren, ich kann die richtigen Beiträge basierend auf dem aktuellen Tag zurückgeben. Das Problem besteht darin, einfach auf die Informationen in diesen zurückgegebenen Posts zuzugreifen. Die letzte While-Schleife schleift die Seite für 30 Sekunden, bevor ich einen Servererrors erhalte.

Solutions Collecting From Web of "WP_Query einfrieren"

Von der Diskussion in den Kommentaren zu Ihrer Frage, hier ist, was ich vorschlagen und empfehlen

Nur um zu wiederholen und alles in einer konstruktiven Antwort hinzuzufügen

  • Der Parameter tag in WP_Query akzeptiert den Begriff slug , nicht den Namen

  • WP_Query Ihre benutzerdefinierte WP_Query immer immer zurück. Nutzen Sie wp_reset_postdata() nachdem Ihre Anfrage kurz vor endif

  • Sie können das tag als Ihren Kurzwahlnamen verwenden, es ist ein reservierter Name in WordPress

Ich glaube, dass Ihre Reihenfolge der Dinge ist, was all Ihre Kopfschmerzen verursacht. Außerdem sollte ein Shortcode seine Ausgabe zurückgeben, nicht echo . Sehen Sie sich die Shortcode API an, um einen Shortcode zu erstellen

Bevor Sie irgendetwas in Ihrem Code überprüfen oder wenn ein Beitrag Tags hat, müssen Sie tatsächlich den aktuellen Beitrag erhalten. Ohne dies funktioniert Ihr Code nicht. Also, das erste, was zu tun ist, rufen Sie Ihren globalen $post . Sobald Sie das haben, können Sie die ID an get_the_tags

Ihr Code sollte funktionieren, sobald dies erledigt ist

Hier ist ein Beispiel: ( Vorbehalt: ungeprüft )

 add_shortcode('shortcodetag', 'tags'); function tags() { ob_start(); global $post; $posttags = get_the_tags( $post->ID ); if ( $posttags ) { // Loop for each tag the custom post has foreach($posttags as $tag) { $tag_name = ($tag->slug); // Search for posts with the same tag, // is a custom type and don't return // the current post $args = array( 'post_type' => 'custom_post', 'tag' => $tag_name, 'post__not_in' => array( $post->ID ) ); $query = new WP_Query( $args ); // Make sure we got results if( $query->have_posts() ) { // Loop through each returned post while ( $query->have_posts() ) { $query->the_post(); // Returns null //LOOP ELEMENTS } wp_reset_postdata(); } } } $myvariable = ob_get_clean(); return $myvariable; } 

BEARBEITEN

Wie @TomJNowell vorgeschlagen hat, sehe ich hier nicht wirklich einen Shortcode. Sie machen einen do_shortcode in Ihrer einzelnen Vorlage. Dies ist genau das Gleiche, als würde man die function direkt aufrufen.

Hier ist ein Beispiel, um dies zu demonstrieren, und wenn ich Ihren Kommentar richtig verstehe, ein Beispiel, wie bestimmte Post-Elemente mit Schablonen-Tags angezeigt werden

 function tags() { global $post; $posttags = get_the_tags( $post->ID ); if ( $posttags ) { // Loop for each tag the custom post has foreach($posttags as $tag) { $tag_name = $tag->slug; // Search for posts with the same tag, // is a custom type and don't return // the current post $args = array( 'post_type' => 'custom_post', 'tag' => $tag_name, 'post__not_in' => array( $post->ID ) ); $query = new WP_Query( $args ); // Make sure we got results if( $query->have_posts() ) { // Loop through each returned post while ( $query->have_posts() ) { $query->the_post(); // Returns null //LOOP ELEMENTS the_title(); //display post title if ( has_post_thumbnail() ) { // check if the post has a Post Thumbnail assigned to it. the_post_thumbnail(); //display the featured image } the_content(); //displays the post's content } wp_reset_postdata(); } } } }