WordPress CMS – Gestaltung der Home Seite-Loop Spielereien 2.Teil

WordPress als CMS zu nutzen ist immer beliebter. Hier zwei Artikeln aus Kategorie 3, dort einen Artikel aus Kategorie 2 und weiter unten noch fünf Artikeln, die zuletzt geschrieben wurden usw..

The Loop heißt dafür das Zauberwort und verschiedene Spielereien damit ermöglichen vieles. Manchmal jedoch muss man WordPress ein bisschen überlisten, so zB.:, wenn man ganz genau 3 Beiträge aus einer Kategorie haben mag. Jedoch alle Beiträge, die in dieser Kategorie UND in einer anderen sind ausschließen mag, aber dennoch genau 3 Beiträge braucht/mag/schön fände. ;)

Sabrina mag dies haben und fragte in einem Kommentar danach.

Ich müsste es aber so haben, dass die aktuellsten 3 Beiträge aus Kategorie 1 angezeigt werden, aber die Beiträge die zusätzlich noch in Kategorie 2 sind ausgeschlossen werden.

Hier mein Lösungsansatz und die Begründung dafür:

Loop 5: Zeige 3 aktuelle Beiträge aus Kategorie 1, schließe alle Beiträge die auch in Kategorie 2 sind aus

Nachfolgende Möglichkeiten sind ebenfalls von mir mit mehreren Loops auf einer Seite getestet.

Loop 5 und Loop 5a und Loop 6 sind von mir gewählte Nummerierungen, damit Du und ich den überblick über meine ganzen Loop Beispiele nicht verlieren.;)

Alle Beispiele sind ohne das nötige HTML. Ob Du dann the_content oder the_excerpt oder überhaupt nur den Link des jeweiligen Artikels zeigst usw. kannst ebenfalls Du entscheiden und ändern.

Möglichkeit 1 Loop 5:

<!--loop5-->
<?php $top_query = new WP_Query('cat=1&showposts=3'); ?>
<?php while($top_query->have_posts()) : $top_query->the_post(); 
$do_not_duplicate = $post->ID;?>
 <?php if ( in_category(2) ) { 
 // mache einfach nichts somit wird die kategorie 2 nicht angezeigt
 } else { ?>
 <?php the_content("&raquo;&raquo;" . the_title('', '', false)); ?>

<?php edit_post_link('E','| ',''); ?>



<?php } ?>
<?php  endwhile; ?>
<!--loop 5 end-->

Möglichkeit 2 Loop 5a:


<!--loop5a-->
<?php $top_query = new WP_Query('cat=1&showposts=3'); ?>
<?php while($top_query->have_posts()) : $top_query->the_post(); 
$do_not_duplicate = $post->ID;?>

<?php if ( !(in_category('2')) ) { ?><!--sperrt artikel -->


<?php the_content("&raquo;&raquo;" . the_title('', '', false)); ?>
<?php edit_post_link('E','| ',''); ?>

<?php } ?><!--sperrt artikel end-->
	
<?php endwhile; ?>
<!--loop 5a-->

Probleme, die sich mit Loop 5 und Loop 5a ergeben:

Die Zählerei!

WordPress ist hartnäckig. Es holt drei Beiträge aus der Datenbank [showposts 3 ], die in Kategorie 1 sind. Ob da auch dann welche dabei sind, die in Kategorie 2 sind ist WordPress erstmal egal.

Die aufgezeigten Möglichkeiten verhindern nur, dass die Beiträge aus Kategorie 2 angezeigt werden. Sind jetzt die neuen Beiträge alle in Kategorie 1 und Kategorie 2 kann es sein, dass dann da gar kein Beitrag steht!

Ich habe den Codex rauf und runter und wieder zurück studiert. Fand auch im WordPress.org Support forum zu genau diesem *Zählerei* Problem so gut wie überhaupt nichts.

Porbierte es mit dem Top Cat Plugin, damit kann man eine Hauptkategorie eines Beitrages festlegen. Also ist ein Beitrag in Kategorie 1 und Kategorie 2 kann man mit diesem Plugin sagen:

Die Chefkategorie ist für genau diesem Beitrag die Kategorie 2.

Es war aber völligst egal. WordPress zeigt dann eben die Chefkategorie 2 nicht an, aber es reduziert die Anzahl der Beiträge. Also wieder dasselbe wie bei meinen Loop 5 und Loop 5a.

Loop 6: die Lösung (!?) Zeige 3 aktuelle Beiträge aus Kategorie 1, schließe alle Beiträge die auch in Kategorie 2 sind aus

Nach mehreren Kaffees, las ich immer wieder diesen Satz und dann kam so ein kleines Glühwürmchen. Ich habe diese Lösung Loop 6 mit mehreren Beiträgen probiert.

Soweit ich es getestet habe zeigt nachfolgender Loop alle Beiträge aus Kategorie 1 an, auch wenn ein Beitrag Kategorie 1 UND Kategorie 3 gespeichert ist. Er schließt jedoch die Beiträge, die Kategorie 1 UND Kategorie 2 gespeichert sind aus.

Und er zeigt vorallem 3 Beiträge an – wenn es überhaupt 3 Beiträge gibt, die diesen Kriterien entsprechen.

<!--loop 6-->
<?php if ( (in_category('1')) ) { ?>
<?php $top_query = new WP_Query('cat=-2&showposts=3'); ?>
<?php while($top_query->have_posts()) : $top_query->the_post(); 
?>


 <?php the_content("&raquo;&raquo;" . the_title('', '', false)); ?>
<?php edit_post_link('E','| ',''); ?>
    
   
<?php  endwhile; ?>
   
   
<?php } ?>

<!--loop 6 end-->

Ich bitte um Erfahrungsberichte mit diesem Loop 6 in der Praxis. Außerdem – wenn wer eine andere Lösung hat -bitte melden.

Etwaige Denkfehler von mir sind möglich – wer denkt (arbeitet) macht Fehler :)
28

28 Beiträge zu “WordPress CMS – Gestaltung der Home Seite-Loop Spielereien 2.Teil

  1. Kommentar Autor
    enmatix
    Kommentar

    Hallo Texto, funktioniert das auch, wenn ich im Adminbereich sage, zeige mir die letzten 5 aktuellsten Beiträge unabhängig der Kategorien an und im Theme dann in die Richtung „Weitere Beiträge gebe mir bitte unterhalb nur als Link aus ohne den geschriebenen Text?

    enmatix.de

  2. Kommentar Autor
    Monika
    Kommentar

    enmatix
    nein, denn diese Loopspielerei setzt – verkürzt erklärt – den Adminbereich außer Kraft.

    lg

  3. Kommentar Autor
    Boris
    Kommentar

    Der Gedankenfehler beim Loop6 ist: Du prüfst die Kategorie-1 noch bevor überhaupt Postings gelesen wurden.
    Sprich: Wenn Du in der Sidebar auf Kat1 klickst dann mag das klappen. Wenn ich aber im index.php alles auschließen wollte was Kat1 UND Kat2 zugeordnet ist, dann geht das logischerweise nicht mehr, richtig?

    Ich kämpfe derzeit auch mit dem Loop weil ich bestimmte Dinge in eine eigene Spalte auslagern möchte und das „blöde“ WP mir dann immer die Anzahl der Postings reduziert *grml*

  4. Kommentar Autor
    Monika
    Kommentar

    Hi Boris schau Dir mal dieses Plugin an..
    damit kann man eine *Hauptkat* für Beiträge festlegen, vielleicht ist dies hilfreich für Dich..

    lg

  5. Kommentar Autor
    Boris
    Kommentar

    Hui – das war ja eine schnelle Reaktion :) hatte ich nicht mit gerechnet nach den frustrierenden Antwortzeiten die es in den WordPress-Foren so gibt :(

    Das PlugIn ist interessant. Hilft mir persönlich allerdings nicht weiter. Macht aber nix – ich bin immer auf der Suche nach interessanten PlugIns, einfach um zu lernen :)

    Ich habe jetzt angefangen den internen Loop zu ignorieren und stattdessen per SQL-Abfrage einen eigenen Loops zu benutzen der eine komplexe WHERE-Bedingung enthalten kann die mir genau das heraus filtert was ich haben möchte, so spare ich mir die IF-Abfragen im Loop und wenn ich 10 Postings lese dann werden auch 10 gezeigt.

    Das Problem ist dabei nur:
    a) Ich kann auch die interne Navigation nicht wirklich verwenden (weil diese sich ja ebenfalls auf den internen Loop bezieht und so zu oft oder zu selten den Prev-/Next-Link zeigen könnte

    b) Wenn ich für Archive oder die Suche einen eigenen Loop schreiben möchte, dann muss ich irgendwie an die interne Where-Bedingung kommen um diese mit meiner Klausel zu erweitern zu können (also ich muss z.B. wissen wonach gesucht wurde oder auf welchen Archiv-Link gerade geklick wurde etc.). Da hänge ich derzeit noch etwas.

    Für die index.php Seite klappt das schon ganz gut (noch ohne eigene Navigation – da suche ich noch wie das geht)

  6. Kommentar Autor
    Monika
    Kommentar

    Hi Boris ungetestet und einfach mal laut gedacht:
    Wenn Du einen Loopcounter einbaust und befiehlst erst nach xyz Loops darf die Navi kommen?

    Bei den Suchergebnissen würd ich gar keine Blätterfunktion einbauen, klickt eh niemand auf die 2. Seite ;)

    lg

  7. Kommentar Autor
    Boris
    Kommentar

    ist inzwischen alles soweit gelöst. Vielleicht noch im Detail etwas schrauben aber im Groben läuft es schon. Eigener Loop mit eigenem SQL. Zwei Loops auf einer Seite, eine Navigation die sich nach dem längsten Ergebnis richtet (der eine Loop bezieht sich nur auf die Galerie, der andere auf die Wortbeiträge)
    Eigene Seitennavigation runden das Template ab :)
    Wie gesagt – Template ist noch nicht bis ins Detail fertig aber läuft erstmal – http://www.nsonic.de

    Ich werde diese Seite hier jetzt erstmal schließen – leider bekomme ich keine Mail wenn ein Feedback eingetroffen ist. Bei Fragen also einfach per Mail über die o.g. Webseite Kontakt aufnehmen.

    Viele Grüße

  8. Kommentar Autor
    Monika
    Kommentar

    Hi Boris gefällt, yepp sieht gut aus.;)

    Ich empfehle Dir noch so ein Plugin, dass Dir unterschiedliche titles und meta description im Header liefert, sonst verschwindet das -im Schweiße des Angesichts erstellte Blog ins Nirwana – Seo Plugin. Lass Dich vom Namen nicht abschrecken ist gut das Ding.

    lg

  9. Kommentar Autor
    Juergen
    Kommentar

    Hallo texto, zunächst vielen Dank für diesen Beitrag – hat mir sehr geholfen! Allerdings hab ich noch ein Problem: Ich hab Loop5a eingebaut…und jetzt funktionieren die Links „Previous Page“ und „Next Page“ auf der Startseite nicht mehr…anstelle der Seite 2, 3 usw. wird immer die Startseite gezeigt…obwohl die URL sich entsprechend ändert (…/2/; …/3/ usw.). Irgend eine Idee was ich falsch gemacht habe bzw. was ich anpassen muss, damit diese Links wieder funktionieren? Vielen Dank im voraus. Gruss, Juergen

  10. Kommentar Autor
    Monika
    Kommentar

    Hi Jürgen ersetze

    ..code..< ?php $top_query = new WP_Query('cat=1&showposts=3'); ?>
    < ?php while($top_query->have_posts()) : $top_query->the_post();
    $do_not_duplicate = $post->ID;?>
    [/php]
    
    mit
    
    <?php
    $wp_query->query_vars["cat"] = 1;
    $wp_query->query_vars["showposts"] = 3;
    $wp_query->get_posts();
    if (have_posts()) : while (have_posts()) : the_post(); ?> 
    

    dann die Zeilen mit dem *Blättern* darunter das
    endif

    dann müßte es funktionieren

    lg

  11. Kommentar Autor
    Juergen
    Kommentar

    hi texto,
    sehr geil! vielen, vielen dank!
    glgz,
    juergen

  12. Kommentar Autor
    soeren onez
    Kommentar

    Ich habe ein Problem, dass ich nicht lösen kann und Worpress als CMS betrifft. Vielleicht kannst du mir helfen, ich habe leider hier nichts dazu gefunden. Ich setze mal einen Link auf meinen neusten Artikel, wo ich das Problem genau beschreibe, dann muss ich das hier nicht wiederholen, wenn das ok ist. Für Hilfe wäre ich sehr dankbar:

  13. Kommentar Autor
    Doc
    Kommentar

    Hi Monika,

    kann man auch auszuschließende Kategorien verknüpfen? In der Art?

    $wp_query->query_vars["cat"] = -21&-11&-8;
    $wp_query->query_vars["showposts"] = 6;
    $wp_query->get_posts();
    [/php]
    
    Wenn ich einzelne Zeilen für die Ausschlußdirektive setze, nimmt wp leider immer nur den 2. Query und der erste wird ignoriert. In der Art:
    
    
    $wp_query->query_vars["cat"] = -21;
    $wp_query->query_vars["cat"] = -11;
    

    Danke für die Hilfe :-)

  14. Kommentar Autor
    Doc
    Kommentar

    … aha! Habe die Lösung doch noch selber entdeckt! Man kann nur max. 1 Kategorie per query ausschließen ohne dabei die Blätterfunktion zu beeinträchtigen. Deshalb ist es günstiger lieber alle gewollten Kats zu includen, statt die ungewünschten zu excluden. Folgender code führt zum Ziel:

    query_vars[„cat“] = ‚1,3,4,5,8,9,10,11,12,13‘;
    $wp_query->query_vars[„showposts“] = 6;
    $wp_query->get_posts();
    if (have_posts()) : ?>

    —-

    Doc

  15. Kommentar Autor
    David
    Kommentar

    Hallo! Danke für die hilfreichen Gedanken und Codes hier! — Allerdings habe ich ein leicht anderes Problem: ich habe lediglich mit plus im Hauptindex ausgeschlossen – allerdings zeigt WP nur 5 Beiträge im Hauptindex an, obwohl über im WP und zusätzlich über CQS-Plugin 7 Beiträge eingestellt sind. Derzeit sind 6 vorhanden, aber eben nur 5 sichtbar auf der ersten Seite. — Muß ich nun zusätzliche Angaben im Code machen oder liegt irgendwo ein Denkfehler meinerseits vor?
    Danke für jede Hilfe!
    ~Viele Grüße & schönes WE, Dave :)

  16. Kommentar Autor
    Monika
    Kommentar

    hmm
    Servus David,

    1. hast Du eingestellt:home 7 Beiträge ohne Plus ohne nichts..
    2. Hast Du wo eine Kategorie ausgeschlossen?
    3. Mehr Fragen fallen mir nicht ein… so von Aussen ..

    was meinst Du mit PHP Angaben waren „+“?
    lg

  17. Kommentar Autor
    David
    Kommentar

    Hallo Monika, danke für die Antwort! Sorry, meinen Code hat es weggelöscht – ich versuche es nochmal ohne Klammern:
    php if ( !in_category(‚6‘)) { ?
    und
    php } ?
    Ist angegeben in der index.php, also für die Home-Ansicht. Funktioniert auch wie es soll, alles super. Nur eben die Beitragszählung klappt nicht mehr richtig, d.h. es werden zuwenig angezeigt. Dabei liegen (bis jetzt) alle Beiträge nur in _einer_ Kategorie! Meine Frage war halt, ob ich noch mehr Code angeben muss, und falls ja, ob die Original-Loop-Angabe von WordPress mit dem neuen Code ersetzt wird oder – wie z.Zt. bei mir – eine Zusatzangabe innerhalb des Loops bleibt. Dies ist mir noch net ganz klar.
    ~Danke und Gruß, Dave :)

  18. Kommentar Autor
    Monika
    Kommentar

    Hi Dave

    die Loopzählerei ist eine eigene ;) der ganz besonderen Art und Weise.

    WP zählt auch, wenn es nicht anzeigen soll;)

    Es kann wirklich sein, dass dies die Zählerei kaputt macht.

    Machs mal *konfus* trial and error* gib mal 8 bem Plugin CQS an…

    lg ich bin dann mal weg..da dauerts länger

  19. Kommentar Autor
    Hens
    Kommentar

    Hallo,
    Angeregt durch diesen Beitrag habe ich folgenden Loop eingebaut:

    $my_query = new WP_Query('category_name=News&showposts=5');
    while ($my_query->have_posts()) : $my_query->the_post();
    $do_not_duplicate = $post->ID; 
    the_content(__('(more...)'));
    endwhile;

    Leider funktioniert hier der „more“-Tag nicht. Hat da jemand eine Lösung?

  20. Kommentar Autor
    Monika
    Kommentar

    zwinge ihn ;)

    global $more;
    $more = 0;
    
    
    $my_query = new WP_Query('category_name=News&showposts=5');
    while ($my_query->have_posts()) : $my_query->the_post();
    $do_not_duplicate = $post->ID; 
    the_content(__('(more...)'));
    endwhile;

    könnte klappen

  21. Kommentar Autor
    Hens
    Kommentar

    Hallo Texto,
    danke für den Tipp. Leider funktioniert das noch immer nicht. Wenn ich ein more einfüge, zeigt er immer nur im Qelltext.
    Grüße Hens

  22. Kommentar Autor
    Hens
    Kommentar

    ah, da wollte er den quelltecht nicht einfügen. Er zeigt also im Quelltext immer nur ein span-Tag mit id, das er dann auch wieder schließt. Kein Link.
    Wie macht man hier so ein schönes Code-Fenster?

  23. Kommentar Autor
    Zoltán Jókay
    Kommentar

    Hallo: ich würde gerne auf der homepage, (blogeinstiegsseite)nach dem Zufallsprinzip alte Beiträge bringen. Ich habe den Code oben zunächst eingebaut, (jetzt aber wieder aus), weil er imme nur den selben Beitrag gezeigt hat. Soll ja wechseln, bei jedem neu Laden der Seite.)
    Ich habe von diesen Dingen keine Ahnung, ich mach nur nach Versuch und Irrtum.
    Danke,
    Jókay

  24. Kommentar Autor
    Alexander
    Kommentar

    Hallo, wissen Sie vielleicht wie man Kategorien mit statischen Seiten verknüpfen kann?

  25. Kommentar Autor
    Monika
    Kommentar

    hi Alexander
    ich arbeite an so einem Artikel–ein /zwei tage Geduld, dann ist er da

    lg

  26. Kommentar Autor
    Thomas
    Kommentar

    Hallo,
    ich habe ein kleines Problem mit den Loops. Folgendes möchte ich realisieren;
    Jeweils der aktuellste Artikel soll als Top-News dargestellt werden. (Egal aus welcher Kategorie – Darstellung in separatem div-Container) Darunter dann jeweils 4-5 Artikel die „älter“ sind. Das ist auch kein Problem, nur die Top-News bekomm ich nicht hin. Beim derzeit eingesetzten CMS ging das mit „offset=(Anz.)“ Gibt´s sowas auch bei WorPress? Oder kann ich das mit einem Loop nachbauen?

    Vielen Dank! :)
    Thomas