Support » Themes » Custom Theme: Fatal Error in Loop

  • abinmorth

    (@abinmorth)


    Ich bin WP Anfänger und habe versucht custom querys zu machen um zB Pages statt Posts anzuzeigen.

    <div id="content">
     <?php 
       $filter = array(
        'post_type' => 'page',
       );
    	$pages = new WP_Query($filter);
    	if($pages->have_posts()){
        while($pages->have_posts()){ 
            $pages->the_post(); 
            ?><h1> <?php the_title();?> </h1> 
            <?php
        }
    	}else{
    		echo "No Pages";
    	}
        ?>
    </div>

    Wenn ich die Seite aufrufe wird der Titel EINER Seite angezeigt.
    Bei der zweiten Iteration des Loops kommt eine Kritische Fehlermeldung
    Fatal error: Call to a member function have_posts() …

    Was mach ich falsch?

    Die Seite, für die ich Hilfe brauche: [Anmelden, um den Link zu sehen]

Ansicht von 6 Antworten - 1 bis 6 (von insgesamt 6)
  • Moderator Bego Mario Garde

    (@pixolin)

    Du nimmst mit deinem Code eine Lösung vorweg, für die wir die Aufgabe noch nicht kennen. Erzähl doch erst einmal, was du machen möchtest.

    $pages = new WP_Query($filter); sieht übrigens etwas ungewohnt aus, weil aus Programmiersicht jede Seite auch ein Post ist, wenn auch aus einem anderen Post Type. Ob du das Array für deine Abfrage nun „$pages“ oder „$diebeitraegeausmeinertollenquery“ nennst, ist eigentlich unerheblich, aber ab der nächsten Zeile mit if($pages->have_posts()){ ist die Verwendung dieser Variablen etwas irritierend. 😉 Sowas wie $query = new WP_Query( $filter ); if( $query->have_posts() ){ ist leichter zu lesen: „Ich mache eine Abfrage und wenn in der Abfrage posts (welchen Post Types auch immer) enthalten sind usw.“

    Zum Debuggen würde ich dann erst einmal ein var_dump( $query ) machen und schauen, ob die Abfrage korrekt läuft. Es gibt ein gutes Dutzend Gründe, wieso hier schon ein Fehler vorliegen kann, die wir aber nur anhand des Code-Auszugs nicht beurteilen können.

    Der Begriff Template Hierarchy und der Umstand, dass sich WordPress jeweils das am besten passende Template raussucht, sind dir bekannt?

    Thread-Ersteller abinmorth

    (@abinmorth)

    das sind nur erste Gehversuche um zu lernen wie man Custom Querys verwendet.
    Soll so in die Richtung Inhaltsverzeichnis von Seiten gehen.
    Das ist der komplette Code. Das Theme enthält bisher nur den obigen Query.

    Thread-Ersteller abinmorth

    (@abinmorth)

    seltsamerweise löst sich der kritische Fehler auf, wenn ich die Variable $pages in $query umbenenne. Sollta ja eigentlich keine Rolle spielen. Wird der Variablenname irgendwo geparst? Oder ist $pages schon ne Standartvariable die ich überschreibe?

    Edit:
    Am Anfang meiner index.php mache ich noch ein get_header();
    wenn ich danach ein var_dump($pages) mache scheint die Variable schon zu existieren

    die header.php besteht nur aus einem wp_head();
    wenn ich ein var_dump($pages) am ende der header.php einfüge, existiert die Variable noch nicht.

    Irgendwo dazwischen scheint die $pages variable definiert zu werden.

    • Diese Antwort wurde geändert vor 1 Monat von abinmorth.
    • Diese Antwort wurde geändert vor 1 Monat von abinmorth.
    Moderator Hans-Gerd Gerhards

    (@hage)

    Hallo,
    schau dir doch mal den folgenden Beitrag an. Da wird das sehr schön erläutert.
    Bezogen auf die Template Hierarchy ist die folgende Webseite hilfreich, weil man da eine direkte Verlinkung zum Codex hat.
    Viele Grüße
    Hans-Gerd

    Thread-Ersteller abinmorth

    (@abinmorth)

    danke für die Antworten

    ich will keine Archiv- Seite machen,
    sondern eher eine Liste von Seiten zwecks Navigation

    den Bug im Code habe ich gefunden, es würde mich aber trotzdem noch interessieren, wo die $pages Variable definiert wird.

    Verwend keine Variablen, die pages, user, oder query heißen!
    Verwend Pre- oder Suffixes, also product_pages, user_for_products oder query_for_product.
    Einerseits gehst du damit allen globalen Variablen aus dem Weg, andererseits ist dein Code lesbarer.

    Und zu deiner Frage: JA!
    > $pages (array)The content of the pages of the current post. Each page elements contains part of the content separated by the <!–nextpage–> tag.

    https://codex.wordpress.org/Global_Variables

    $pages ist eine globale Variable im Loop!

    • Diese Antwort wurde geändert vor 4 Wochen, 1 Tag von souri.
Ansicht von 6 Antworten - 1 bis 6 (von insgesamt 6)