Templates machen das Leben einfacher – vergiss query_posts

Loop Beispiele WordPress
Loop in WordPress

Hierarchie all überall auch in der WordPress Welt ;).
==> Für den Redakteur soll die Profilseite schon anders aussehen, als für den Autor. query_posts author=6

==> Und meine Portfolio Kategorie hat sich ein ganz eigenes Aussehen einfach verdient! query_posts cat=345

==> In all meiner Auflistung der Musiker (mittels custom taxonomien) ist mir Britney einfach was schöneres wert…. usw. query_posts array ‚musiker‘ => ‚britney‘

Immer wenn es darum geht eine bestimmte Ausnahme in der Darstellung zu machen sehe ich dann Konstrukte mit Loops. query_posts ist da allgemein sehr beliebt.

Man sucht sich in den diversen loop.php Dateien kreuz und quer, sucht verzweifelt nach if-Schleifen, die aber doch if-Abfragen sind und kennt sich schlussendlich selbst nicht mehr aus. Haare werden Grau, Falten beginnen die Nasenwurzel zu zieren…

Und das alles nur wegen query_posts. Ich bin ja strikt dafür dies aus dem Codex zu entfernen. Ratzefatz weg damit, denn was macht dieser so offensichtlich einfache Loop.

Was macht query_posts

zb

query_posts( author=5 );
get_header( );
while( have_posts( ) ) : the_post( );
endwhile;
get_footer( ); 

query_posts ist die einfachste Art die Standard Ausgabe der Artikel pro URL zu ändern.
zb Archiv, Kategorie, Tagseite, Startseite, Einzelansicht eines Artikels.

Codex zu query_posts

Ja, es ist die einfachste Art, doch es zerstört nachhaltigst die natürliche Ordnung in WordPress.

Nutzt Du query_posts veränderst Du die gesamte Standardausgabe der Artikel: Angefangen von den template tags bishin zu den globalen Variablen.

  • die meisten verzweifeln , weil dann die Pagination /Weiterblätterei nicht mehr funktioniert.
  • die wenigsten erkennen, dass query_posts immer 2 queries macht. Stichwort: Performance Deines Blogs.

Tipp ==> Nutze query_posts nur, wenn Dir wirklich absolut und überhaupt keine Alternative mehr einfällt. Und das ist so selten der Fall.
Und wenn Du es schon nutzt, dann setz den Loop wieder zurück mit wp_reset_query( ) .

Wie kannst Du query_posts umgehen.

1.
Für die Redakteuren eine wunderbare Profilseite: author-{nickname}.php oder author-id.php.

Keiner hat 100derte von Redakteure in seiner WP Installation, diese paar Templates sind schneller erstellt, als stundenlanges suchen nach query_posts Lösungen.

2.
Für die Portfolio Kategorie ein eigenes Aussehen: category-slugname.php oder category-id.php.

2a.
Ist Dein Portfolio ein custom post type, dann archive-{post_type}.php => archive-portfolio.php und für die Einzelansichten single-{post_type}.php => single-portfolio.php.

3.
Für Deine Britney aus der custom Taxonomie: taxonomy-{taxonomy}-{term}.php

Ist die Taxonomie Musiker und der Slug der Taxonomie ist britney, dann findet WP auch taxonomy-musiker-britney.php

Fazit: Bevor Du krampfhaft versuchst alles in einem template unterzubringen nutze die Template Hierarchie von WordPress voll aus und Du hast

1. mehr Überblick in deinem ThemeOrdner und
2. weniger Chance je query_posts nutzen zu wollen. ;)

Und wenn du Loops brauchst, dann nutze diese Möglichkeiten.

ich hab es lieber einfacher, denn dreimal ums Eck gedacht..
9

9 Beiträge zu “Templates machen das Leben einfacher – vergiss query_posts

  1. Kommentar Autor
    Alesandra
    Kommentar

    Mal sehen, ob ich das endlich mal geschnallt bekomme. Derzeit habe ich dann meist ehr etliche Loops im Kopf statt in der Zeile und gebe dann genervt auf. Aber sag niemals nie. :-)

  2. Kommentar Autor
    Gabi Drösel
    Kommentar

    Ich kriegs einfach nicht zum laufen. Aber heute Abend kommt mein Bruder, der muss das dann für mich einrichten ;)
    Danke für die Mühe, die du dir immer machst. Wirklich klasse!

    editiert von Monika aka texto

    visitvaldinon[dot]com

  3. Kommentar Autor
    Monika
    Kommentar

    liebe Gabi

    um das zum Laufen zu bringen braucht man WordPress bei
    CMS Contenido 4.8.12

    wirds nie gehen, selbst wenn es drei Brüder von Dir probieren…

    Contenido 4.8.12 ist unter der Haube von visitvaldinon[dot]com

  4. Kommentar Autor
    Peiler
    Kommentar

    Hallo,
    das query_post nicht optimal ist, habe ich auch schon bemerkt. Mein Problem ist aber, dass ich nur bestimmte Artikel ausliefern will. das heoßt ich erhalte nach einer abfrage, Artikel IDs. Diese würde ich gerne über den Loop ausgeben. Geht das überhaut und wenn ja wie? Mit query_post hat es jedenfalls nicht funktioniert.

    Dann eine Frage zu coustom Site. Also single-page.php usw. . Baust Du hier deine Loops ein und arbeitest mit den wp tags oder schreibst du deine eigenen sql statments hier rein und bastelst dir das zusammen? sorry, dass thema ist neu für mich…danke!

  5. Kommentar Autor
    Monika
    Kommentar

    das könntest du mit der class wp-query machen

    wenn ich eigene templates mache, dann geht es meist um eine andere Darstellung, also anderes html

    brauche ich dann dort aber einen eigenen Loop, dann nehm ich auch lieber die oben verlinkte class

  6. Kommentar Autor
    Peiler
    Kommentar

    danke für die Antwort. Jetzt habe ich mir eben die class wp-query angeschaut und folgendes gefunden:

    1. Das würde funktionieren:
    $query = new WP_Query( ‚p=7‘ );

    2. Das würde nicht funktionieren:
    $query = new WP_Query( ‚p=7′,’p=10,’p=15‘ );

    wie kann ich das machen, dass ich der WP_Query mehr Post_IDs mitgebe und diese dann über den Loop bzw. Schleife mir ausgeben lasse? übersehe ich hier etwas?

  7. Kommentar Autor
    Monika
    Kommentar
    <?php
    $temp = $wp_query;
    $wp_query= null;
    $wp_query = new WP_Query();
    $wp_query->query( array( 'post__in' => array( 7,10,15 ) ) );
    while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
    
    ausgabe
    
    <?php endwhile;  $wp_query = null; $wp_query = $temp;?>

    so :-)

    das findest du auf der Codex Seite unter der Überschrift:
    Multiple Posts/Pages Handling

  8. Kommentar Autor
    Peiler
    Kommentar

    Vielen lieben Dank, hat teils geholfen. Vielleicht weißt Du noch Rat. Es geht um das Array mit den IDs. Die IDs werden generiert und sind bei jeder Suche anders. das bedeutet ich kann leider nicht schreiben

    => array ( $my_gen_ID )

    leider!

  9. Kommentar Autor
    Monika
    Kommentar

    bei jeder Suche anders…

    erzähl mir was Du haben magst, also die Ausgangslage, nicht Deine Lösung derselben…