Navigation funktioniert nicht - query_posts() und wp_reset_query() Problem?

  • Hallo Forum,

    auf der Startseite meines Blogs sollen nur die Beiträge erscheinen, die in einer bestimmten Kategorie (oder einer Unterkategorie dieser) einsortiert sind.

    Deshalb habe ich vor die Loop den Code-Schnipsel

    PHP
    <?php if (is_home()) { query_posts('cat=1'); } ?>

    eingefügt. In der Sidebar möchte ich einen Begrüßungstext anzeigen lassen, solange sich der Besucher auf der Startseite befindet. Durch das query_posts() funktioniert aber die Abfrage is_home() in der sidebar.php nicht mehr. Wordpress meint dann, es befände sich im Kategorie-Archiv, also liefert is_home() immer FALSE. Um dieses Problem zu umgehen habe ich in der sidebar.php mit dem Code

    PHP
    <?php wp_reset_query(); ?>

    die Abfrage wieder zurückgesetzt.

    Nun funktioniert aber das Blättern zwischen den verschiedenen Seiten nicht mehr - auf der Seite ../page/2/ erscheinen die gleichen Beiträge wie auf der Startseite!

    Wie kann ich da Abhilfe schaffen?

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Du könntest die Query an ein Query Object "binden", dann dürfte es im folgenden Code keinen Einfluss haben. Z.B. so:

    PHP
    <?php $query1 = new WP_Query('cat=1');
    if ($query1->have_posts()) : while ($query1->have_posts()) : $query1->the_post(); ?>
    ...

    wpseek.com - Die WordPress-Code-Suchmaschine

  • Problem besteht weiterhin...

    Ich habe deinen Vorschlag umgesetzt, aber leider besteht das Problem weiterhin! Immerhin - den Aufruf von wp_reset_query() in der sidebar.php kann ich weglassen, Wordpress weiß immer noch, dass es auf der Startseite ist.

    Auch die Navigationslinks verändern sich entsprechend - es werden nur leider immer die ersten 10 Beiträge aus der Kategorie ausgegeben, egal ob man sich auf der zweiten Seite befindet oder nicht...

    Ich glaube es liegt am

    Code
    $query1 = new WP_Query('cat=1')

    bzw. am alten Code

    Code
    query_posts('cat=1');

    Dadurch werden immer nur die letzten X Beiträge aus der Kategorie geholt, egal auf welcher Seite ich bin. Kann ich die Abfrage so verändern, dass er auch die Seite, auf der ich mich befinde, berücksichtigt?

    Dann könnte ich mir evtl. die zweite Loop mit dem WP_Query-Objekt auch sparen, wenn eine solche Abfrage mit query_posts() möglich wäre.

  • Danke!

    Dein Tipp hat funktioniert! Aber was genau bedeutet der Parameter in WP_Query eigentlich?

    Code
    [COLOR=#000000][COLOR=#0000CC]$query1 [/COLOR][COLOR=#006600]= new [/COLOR][COLOR=#0000CC]WP_Query[/COLOR][COLOR=#006600]([/COLOR][COLOR=#0000CC]$query_string [/COLOR][COLOR=#006600]. [/COLOR][COLOR=#CC0000]'&cat=1')[/COLOR][/COLOR]
  • $query_string enthält im Grunde alle für die aktuelle Seite gesetzten Parameter, also wenn du dich auf /page/2 befindest, wird quasi der offset-Parameter gesetzt, um nicht wieder beim ersten Artikel anzufangen. So arbeitet ja der normale Loop auch. :)

    wpseek.com - Die WordPress-Code-Suchmaschine

  • Danke, ich denke, ich hab's jetzt verstanden :-)

    Aber eine Frage hätte ich noch (nur zu meiner Information):

    Hätte ich das ganze auch ohne die zweite Loop und das WP_Query-Objekt hingekriegt, indem ich einfach

    Code
    query_posts($query_string . '&cat=1')

    benutzt und den Aufruf von wp_reset_query() beibehalten hätte? Oder sollte man solche Abfragen besser mit einem WP_Query-Objekt machen?

    Auf der Seite http://codex.wordpress.org/Alphabetizing_Posts sind ja einige Beispiele angegeben, die ebenfalls query_posts() in Kombination mit query_string() benutzen.

    (Ich könnte das jetzt selbst probieren, aber ich werde an meinem funktionierenden Code nix mehr ändern *G*)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!