Für Menschen · Seien Sie begeistert und Sie werden begeistern !

WordPress ist in erster Linie ein Blog-Plattform. Nicht selten wird es aber als CMS eingesetzt und dabei spielen nicht nur Seiten eine Rolle, sondern auch Beiträge, da sie mehr Möglichkeiten geben, performanter laufen und im Standard im Feed zu finden sind. Daher nutze ich auch im Rahmen von WP als CMS oft lieber die Beiträge als die statischen Seiten. Ab und an sind die Wünsche im Rahmen von Navigationen dabei recht ausgefallen und so war bei einem letzten Projekt die Anforderung, liste die Beiträge pro Kategorie zur Kategorie in der Navigation.
Dies ist insofern unüblich, da man auf lange Sicht viele Beiträge hat und die Navigation dann recht unübersichtlich wird - trotzdem hat in dem Fall der Wunsch Sinn gemacht und eine Lösung für die Navi musste her.
Die kleine Funktion listet die Kategorie und darunter die Beiträge. Es gibt einen Parameter, der die Ausgabe der Beiträge einschränkt, so dass es im Extremfall nicht zu viele werden und die letzten Beiträge gelistet werden - $mylimit. Die Übergabe des Wertes -1 für diesen Parameter sorgt für das Ausgeben aller Beiträge, alternativ nutzt einen Wert, der die Anzahl bestimmt. Die Funktion selber gehört in die functions.php des Themes oder ein Plugin ausgelagert. Eine beispielhafte Verwendung findet ihr im Anschluss an die Funktion.
function fb_posts_by_category() {
global $wpdb, $post;
$mylimit = '-1'; // limit for posts, -1 for all
$sort_code = 'ORDER BY name ASC, post_date DESC';
$the_output = '';
$last_posts = (array)$wpdb->get_results("
SELECT $wpdb->terms.name, $wpdb->terms.term_id
FROM $wpdb->terms, $wpdb->term_taxonomy
WHERE $wpdb->terms.term_id = $wpdb->term_taxonomy.term_id
AND $wpdb->term_taxonomy.taxonomy = 'category'
{$hide_check}
");
if ( empty($last_posts) )
return NULL;
$used_cats = array();
$i = 0;
foreach ($last_posts as $posts) {
if ( in_array($posts->name, $used_cats) ) {
unset($last_posts[$i]);
} else {
$used_cats[] = $posts->name;
}
$i++;
}
$last_posts = array_values($last_posts);
//$the_output .= '<ul>';
foreach ($last_posts as $posts) {
$class = 'cat-item cat-item-' . $posts->term_id;
$catsy = get_the_category();
$current_category = $catsy[0]->cat_ID;
if ( isset($current_category) && $current_category && ($posts->term_id == $current_category) )
$class .= ' current-cat';
elseif ( isset($_current_category) && $_current_category && ($posts->term_id == $_current_category->parent) )
$class .= ' current-cat-parent';
$the_output .= '<li class="' . $class . '"><a class="category" href="' . get_category_link($posts->term_id) . '">' . apply_filters('list_cats', $posts->name, $posts) . '</a>';
$where = apply_filters('getarchives_where', "WHERE post_type = 'post' AND post_status = 'publish'" , $r );
if ('-1' !== $mylimit)
$limit = ' LIMIT ' . (int) $mylimit;
else
$limit = '';
$arcresults = $wpdb->get_results("SELECT ID, post_title FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' AND ID IN (Select object_id FROM $wpdb->term_relationships, $wpdb->terms WHERE $wpdb->term_relationships.term_taxonomy_id =" . $posts->term_id . ") ORDER BY post_date DESC$limit");
if (isset($arcresults) && $arcresults) {
$the_output .= '<ul>';
foreach ( $arcresults as $arcresult ) {
$class = 'post-item post-item-' . $arcresult->ID;
$current_post = get_the_ID();
if ( isset($current_post) && $current_post && is_singular() && ($arcresult->ID == $current_post) )
$class .= ' current-post';
$the_output .= '<li class="' . $class . '"><a class="post" href="' . get_permalink($arcresult->ID) . '">' . apply_filters('the_title', $arcresult->post_title) . '</a></li>';
}
$the_output .= '</ul>';
}
$the_output .= '</li>';
}
//$the_output .= '</ul>';
echo $the_output;
}
Dazu genügt im einfachsten Fall die Ergänzung des SQL-Query, wo man die IDs mitteilt, die durchsucht werden dürfen.
AND $wpdb->term_taxonomy.term_id IN (3,8,9)
Alternativ kann man auch Kategorien ausschließen
AND $wpdb->term_taxonomy.term_id NOT IN (3,8,9)
Beispielhafte Verwendung in der sidebar.php, die hier mit Markup HTML5 auskommt.

<div id="sidebar">
<nav>
<h3>Navigation</h3>
<ul>
<li><a title="Startseite aufsuchen" href="<?php bloginfo('url'); ?>">Home</a></li>
<?php
fb_posts_by_category();
wp_list_pages( 'title_li=&sort_column=menu_order&exclude=2,14,49' );
?>
</ul>
</nav>
</div>
Mit Hilfe von ein wenig JavaScript und dem Framework jQuery kann man dann jeweils nur den Bereich zeigen, der aktiv ist, eine kleines Beispiel dazu, welches die Klassen anspricht und entsprechend die Animation auslößt.
jQuery(document).ready(function($) {
$(".cat-item ul").hide();
$(".current-cat ul").show();
$(".page_item ul").hide();
$(".current_page_parent ul, .current_page_item ul").show();
return false;
});
bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.
Das Weblog wird angetrieben von WordPress und aktuell gibt es 971 Beiträge, 19461 Kommentare in 14 Kategorien und 459 Tags.
Das Blog wird liebevoll mit xHTML & CSS in Handarbeit gestaltet. Erstellt mit ♥ zum Befüllen und Erhalten.
Design und Code ist unter Copyright
© 2001 - 2012 bueltge.de [by:ltge.de]
Kommentar schreiben
Kommentar-Hilfe
händischer Spam:
Beachte die Kommentarregeln, jede Form von versuchtem Spam wird gelöscht. Warum und wieso steht in einem meiner Beiträge.
Bezug auf Textstellen:
Du kannst direkt bezug auf Textstellen im Beitrag nehmen. Dazu muss lediglich der Bereich im Artikel markiert werden; daraufhin erscheint ein Button, der den markierten Text in das Kommentarfeld übernimmt und als Zitat auszeichnet. Die Funktion ist nur bei aktivem JavaScript nutzbar.
xHTML:
Du kannst folgende Tags benutzen:
<a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <code> <pre> <em> <strong> <strike> <ul> <ul> <li>Achte darauf, wenn du Code im Kommentar hinterlegen willst, dann muss der Code maskiert sein. Dann wird er nicht interpretiert. Der Code muss mit Hilfe von HTML-Entities dargestellt werden, d.h. dass man z.B. < als
<und > als>einfügt.E-Mail-Benachrichtigung bei neuen Kommentaren ?
Wenn der Haken in der Checkbox gesetzt ist, dann wirst du über neue Kommentare vie E-Mail informiert. Der Versand erfolgt nur, wenn du die URL in der Bestätigungs-E-Mail genutzt hast oder schon Abonnent hier im Blog bist.
Kommentar erscheint nicht:
Alle Kommentare werden manuell geprüft, freigegeben und nach Möglichkeit beantwortet. Bitte um etwas Geduld und Nachsicht.
Identifikationsbilder (Avatare):
Auf Gravatar.com kann man sich mit seiner E-Mail-Adresse registrieren und ein Bild hochladen, dann erscheint dieses Gravatar hier und in vielen weiteren Blogs.
Spamschutz:
Das Kommentarformular ist mit einem Spamschutz ausgerüstet. Solltest du diesen Artikel ohne JavaScript besuchen und kommentieren wollen, so muss du die Frage beantworten und das jeweilige Wort in das Textfeld eingeben.