Sidebar
ein-/ausblenden

Ähnliche Seiten auf Basis der Kategorie in WordPress

Plugin für WordPress SEO

Anzeige

Den Leser auf der Site halten ist nicht immer einfach. Es gilt Information zu bieten und es fällt schwer, gerade in Blogs, die alten Beiträge wieder dem Leser zugänglich zu machen. In dem Zusammenhang könnte man dem Leser Beiträge anbieten, die aus der gleichen Kategorie kommen und den Leser auf der Site halten. Warum nicht, dazu reicht eine kleine Funktion, die auf Basis der Kategorie-ID ähnliche Beiträge listet.

Die folgende kleine Funktion, abgelegt als Plugin oder in der functions.php des Themes, gibt Beiträge in Abhängigkeit der Kategorie aus. Die Funktion lässt drei Parameter zu:

  • $limit (int) Anzahl der auszugebenden Beiträge
  • $catName (bool) Kategoriename ausgeben, TRUE oder FALSE
  • $title (string) String für einen Text über allen auszugebenden Beiträgen

Sie hat keine direkte Ausgabe, so dass man die Inhalte auch übergeben kann. Will man sie im einfachsten Fall in einem Template einsetzen, zum Beispiel im Sidebar, dann die sidebar.php, ist folgende Syntax aufzurufen: echo fb_cat_related_posts();.


function fb_get_cat_related_posts( $limit = 5, $catName = TRUE, $title = '<h3>Recent Pages</h3>' ) {

	if ( !is_single() ) // nur bei Beiträgen eine Ausgabe, kann angepasst/gelöscht werden
		return;

	$limit = (int) $limit;
	$output  = '';
	$output .= $title;

	$category = get_the_category();
	$category = (int) $category[0]->cat_ID;

	if ( $catName )
		$output .= __( 'Kategorie: ' ) . get_cat_name($category) . ' ';

	$output .= '<ul>';

	$args = array(
		'numberposts' => $limit,
		'category' => $category,
	); 

	$recentposts = get_posts( $args );
	foreach($recentposts as $post) {
		setup_postdata($post);
		$output .= '<li><a href="' . get_permalink($post->ID) . '">' . get_the_title($post->ID) . '</a></li>';
	}

	$output .= '</ul>';

	return $output;
}

Die Funktion stellt nur eine Basis dar und kann natürlich beliebig erweitert werden. Ebenso könnte man diverse Abfragen integrieren, so dass wenn es keine Artikel gibt, auch keine Überschrift ausgegeben wird.
Aktuell werden auch die Beiträge der Unterkategorien gelistet.

Viel Spass damit, vielleicht hat der eine oder andere nützliche Erweiterungen und legt die dann hier in den Kommentaren ab.

16 Kommentare zu „Ähnliche Seiten auf Basis der Kategorie in WordPress“

  1. 1
    Kommentar von JakobD

    Es gibt auf jeden Fall ein "Related Posts by Category"-Plugin von Sergej:

    http://playground.ebiene.de/356/related-posts-by-category-wp-plugin-fur-verwandte-beitrage-einer-kategorie/

    Ich mach das ja gar nicht auf meinem Blog. Ich sortiere die Beiträge weder nach Kategorien noch tagge ich sie. Daher konnte ich das Plugin auch noch nicht testen, aber es ist bestimmt ganz gut.

  2. 2
    Kommentar von NewsShit!

    Ich habe gerade 10 Minuten herumgetüftelt und immer einen Parser-Fehler bekommen. Ursache war ein fehlendes }; ganz am Ende des Codes. :-)

    Jetzt kann ich es mal ausprobieren :-)

  3. 3
    Kommentar von René

    Hallo, kurze frage: Ist es auch möglich eine derartige funktion in der single.php zu nutzen? Ich nutze leider einige Plugins die mit den bekannten Plugins für ähnliche Beiträge nicht funktionieren. zumindest auf meiner Seite nicht.

    Besten Dank und weiter so :)

  4. 4
    Kommentar von Johannes

    Du bist ein Medium. Punkt. Habe grad das halbe Internet nach einem Related Posts Plugin durchsucht, das speziellen Schwerpunkt auf Kategorien legt. Dann Denk ich mir: Mal schauen, was Frank so an Artikeln zu dem Thema anzubieten hat und der erste (Man sollte das eigentlich so schreiben: DER ERSTE) Artikel auf der Startseite behandelt genau das, was ich eigentlich suche: Ich schreib mir die Funktion einfach selber.

    Ich halte meine linke Sandale hoch. Im Ernst ;-)

  5. 5
    Kommentar von Frank Bültge

    @René: die Funktion kannst du überall nutzen, einfach den Aufruf der Funktion in die single.php oder wo auch immer, und fertig. Dabei ist mir aufgefallen, dass ich das nicht erklärt habe, hole ich sofort nach.

  6. 6
    Kommentar von Johannes

    Soweit ich das gesehen habe, funktioniert die Funktion "ausschließlich" auf der Single, da das an erster Stelle abgefragt wird... Ah und die schließende Klammer am Ende brauch ich nicht mehr erwähnen ;-)

  7. 7
    Kommentar von Frank Bültge

    @Johannes: die Ausgabe ist in meinem Beispiel nur dann, wenn es sich um einen Beitrag (single) handelt, ja und dein Hinweis habe ich gerade gefixt, danke.

  8. 8
    Kommentar von Ivan

    Ich liste selber auf meiner Seite ähnliche Beiträge auf, die in jedem Artikel unten erscheinen, maximal zehn. So hat der Leser wirklich einen Mehrwert und die alten Artikel werden so auch wieder hervorgeholt.

  9. 9
    Kommentar von René

    @JakobD: hat wunderbar funktioniert. Ich weiß das ich dieses Plugin bereits ausbrobiert habe. Vielleicht liegt es auch am Update auf WP-2.8.1

    Danke :)

  10. 10
    Kommentar von Andy

    Für mich war das bisher Neuland, mal wieder was dazu gelernt! Danke

  11. 11
    Kommentar von tanalahy

    In der single.php rufe ich mit
    echo fb_get_cat_related_posts();
    die Funktion auf und es funktioniert soweit bis auf den Zähler der Kommentare.

    Ein Fehler führt dazu, dass die nachfolgende Funktion
    comments_number('Kein Kommentar', '1 Kommentar', '% Kommentare' )
    in allen Fällen Kein Kommentar ausgibt.

    Ich kann den Fehler bisher nicht finden. Hat jemand eine Idee?

  12. 12
    Kommentar von Andy

    Auf jeden Fall danke für den Tipp. Auch wenn man mein PHP sehr begrenzt ist. ;-)

  13. 13
    Kommentar von Sebastian

    Was soll das für eine Funktion sein wenn ich Fragen darf? Habe ich noch nie in PHP gesehen: also "__($param)":

    __( 'Kategorie: ' )

  14. 14
    Kommentar von Frank Bültge

    @Sebastian: dies ist eine Funktion von WordPress für die Unterstützung der Mehrsprachigkeit, keine Funktion von PHP.

  15. 15
    Kommentar von Johannes

    @tanalahy & Frank: Da gibt es ein klitzekleines Problemchen: Die Funktion startet einen Loop innerhalb des aktuellen WordPress Loops - Dh. Am Ende der Schleife steht $post auf dem letzten ähnlichen Artikel. Wenn jetzt nach Aufruf der Funktion zB. das Kommentar-Template eingebunden wird, steht zu dem Zeitpunkt was falsches in der $post-Variable: Man kommentiert dann in Wirklichkeit für den letzten der angezeigten ähnlichen Artikel ;-)

    Simple Solution: Am Anfang der Funktion die aktuelle $post sichern:

    global $post;
    $originalPost = $post;

    In PHP5 muß man wahrscheinlich noch ein clone davorsetzen:

    global $post;
    $originalPost = clone $post;

    Am Schluß (direkt vor dem return) die $post-Variable wieder restaurieren:

    $GLOBALS['post'] = $originalPost;
    setup_postdata($originalPost);

    Dann funktioniert auch mit dem Nachbarn... äh den Kommentaren ;-)

    lG aus Salzburg!
    Ein Ösi

  16. 16
    Kommentar von tanalahy

    @Johannes: das mit dem falsch adressierten Kommentar habe ich schon bemerkt, jetzt sind mir die Gründe klar. Danke.

Überlastung, Kommentare sind vorübergehend geschlossen

Ich bin urlaubsreif, ersticke in Arbeit und damit auch für die Leser des Weblogs nicht zu erreichen. Bitte geduldet euch ein wenig mit Supportanfragen.
Leider muss ich die Kommentarfunktion deaktivieren, ansonsten würde ich weiter in Arbeit ersticken oder die Anfragen nicht nach bestem Gewissen beantworten.

Vielen Dank für das Verständnis!