Loop Spielereien: Doppelte Artikel verhindern

Loop Beispiele WordPress
Loop in WordPress

Du magst auf der Startseite aus ganz bestimmten Kategorien Artikel anzeigen und wiederum woanders einfach Artikel, aber eben nicht mehr aus diesen vorherigen Kategorien. Wie Du die jeweiligen Artikel dann anzeigst, also nur die Überschrift oder den Inhalt oder nur einen Auszug ist dann Geschmackssache. Hier beschreibe ich wie Du das Template – also die index.php präparieren mußt, damit Dein Vorhaben gelingt.

Und dies könnte auch eine Antwort auf die Frage von karlkoch sein in einem der Kommentare hier bei mir.

Will man Artikel ausschließen dann filtert man diese am besten

Du kannst Dir das ruhig wie bei jedem normalen Filter vorstellen. Die guten ins Kröpfchen, die schlechten ins Töpfchen … oder so.

Also brauchts einen WP Filter, um dies umzusetzen. Hier gibt es genug davon:WP Filter ;).

Wir brauchen also einen Filter, der uns sagt „Wo ist denn der Artikel?“ – mit ein wenig Englisch landet man dann ganz automatisch beim Richtigen: posts_where ;) .

Dazu steht im Codex:

posts_where
applied to the WHERE clause of the query that returns the post array.Codex

Ganz frei und praktisch übersetzt: posts_where ist ein Filter, der es erlaubt in die Datenbankabfrage der Artikel einzugreifen.

Da nur die Artikel aus der Kategorie X,Y,Z da sein sollen und später nicht mehr da sein sollen, wollen wir eingreifen und dies geht mit einer Funktion am besten.

post_strip ist ein frei gewählter Name!

<?php function post_strip($where) {
	global $myPosts, $wpdb;
	$where .= " AND $wpdb->posts.ID not in($myPosts) ";
	return $where;
} ;?>

Der 1. Loop Artikeln aus den Kategorien X,Y,Z

In meinem Beispiel haben diese Kategorien die IDs 2,5,8 und es werden 5 Artikel angezeigt.

Bitte die überflüssigen Leerzeichen zwischen spitzer Klammer und Fragezeichen entfernen -Danke!

<?php
global $myPosts;
$myPosts = '';
?>
<div>
<?php
$my_query = new WP_Query();
$my_query->query('cat=2,5,8&showposts=5');
if ($my_query->have_posts()) : while ($my_query->have_posts()) : $my_query->the_post();  
 $myPosts .= $post->ID . ","; ?>
<h2><?php the_title(); ?></h2>
<!-- alles was du anzeigen oder nicht anzeigen magst-->
< ?php endwhile; endif; ?>
</div>

Zuerst sage ich WP, dass myPosts jetzt gilt – dann mache ich den Loop,also ich hole aus den Kategorien 2,5,8 insgesamt 5 Artikel, und teile WP mit, dass die Artikel ID (post ID) „meine Posts“ also myPosts sind :zwinker: .

2. Loop einfach Artikel anzeigen, aber eben nicht die obigen ==> Filter !

Zuerst sage ich WP, dass jetzt myPosts nicht mehr gilt, dann füge ich den Filter hinzu und gebe WP bekannt, dass der nach meinen Regeln filtern muß.

<?php $myPosts .= "0";  add_filter('posts_where', 'post_strip'); ?>

Jetzt kann ich einen ganz normalen Loop erstellen und WP macht – hoffentlich was ich will und zeigt alles an, aber nicht Artikel, die in obigen Kategorien bereits drin sind.

<div>
<?php
$my_query = new WP_Query('showposts=5');
while ($my_query->have_posts()) : $my_query->the_post();? >
<h2>< ?php the_title(); ? ></h2>

<!-- alles was Du anzeigen magst, content  excerpt weiterblättern etc etc 
am besten im default theme anschauen was es da alles gibt -->

<?php endwhile; ?>
</div>

Filter entfernen nicht vergessen

Der hinzugefügte Filter wäre ewigst gültig, da das aber nicht sein sollte, ist es besser in wieder wegzunehmen, es erleichtert das Leben eindeutig:

 <?php remove_filter('posts_where', 'post_strip'); ?> 

Achtung: Hast Du in WP 2.7

einen Artikel als „sticky“ markiert, bleibt der da-logischerweise ;)

Fertig!

War dies hilfreich, freu ich mich über einen Link, Social Bookmark und wenn Du weiter am Ball bleiben willst, abonnier einfach das Feed :zwinker:

bei Kaffee mag ich aber keine Filter ….
3

3 Beiträge zu “Loop Spielereien: Doppelte Artikel verhindern

  1. Kommentar Autor
    Lupa
    Kommentar

    Hallo,
    ich bin schon seit Tagen verzweifelt auf der Suche nach einer Lösung für mein Problem, ich dachte schon, das wäre es jetzt, aber ich habe doch ein anderes Problem als das hier beschriebene.

    Vielleicht könntest Du mir da behilflich sein?

    Ich bin neu bei WordPress und habe mir ein dreispaltiges Theme ausgesucht, das nature heißt. Ich denke, daß ich die neueste Version von WordPress habe, da ich ja erst vor 3 Tagen runtergeladen habe. Das Theme ist widgetfähig.

    Nun zu meinem Problem:
    Ich habe mir vier Widgets als Hauptüberschrift in meine Seite gemacht. „Plants“, „Animals“, „Figures“ und „Misc“. Später kommen noch mehr dazu.

    Ich habe mal Testartikel erstellt und sie in Unterkategorien eingestellt. Also z.B. bei „Animals“ habe ich „Giraffe“ und „Camel“.

    Nun ist aber das Problem, daß alle Kategorien in allen Widgets erscheinen. Ich habe schon alles mögliche versucht, mit exclude z.B. Aber das hatte nichts gebracht.
    Geht das überhaupt zu machen? Oder kann ich es anders lösen, daß ich eine große Überkategorie z.B. als Bild habe und dann meine Unterkategorien?
    Nee, ich glaube das geht auch nicht, denn ich kann ja keine Bilder zwischen die einzelnen Kategorien schieben.

    Help! Vielleicht hast Du eine Idee? Ich wäre sehr dankbar dafür! Beispielseite ist:
    Gruß
    Lupa

  2. Kommentar Autor
    Monika
    Kommentar

    du musst dir das Plugin Exec php holen, dann kannst du in die Textwidgets auch code reinschreiben,
    dann suchst Du Dir via Google wp_list_categories – codex WordPress , dort findest Du wie man Kategorien ein oder ausschließt, so kannst Du Dein Problem lösen

    lg

  3. Kommentar Autor
    Lupa
    Kommentar

    Vielen Dank, ich werde das mal ausprobieren. Das hört sich ja ganz gut an.