geht auch einfacher..
Mich hat dieses Verhalten von Wordpress auch sehr genervt und da ich keine Lust hatte bei jedem Menüpunkt jedesmal eine Bedingung zu erstellen hab ich mir den Code angeschaut.
Hier meine Lösung mit WordPress 2.6.2 DE-Edition:
1. Methode funktioniert mit Permalinks im Standard-Modus:
in der Datei wordpress\wp-includes\query.php in ~ Zeile 1040 steht folgende Anweisung:
if ( !empty($q['category__in']) ) {
$join = " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) ";
$whichcat .= " AND $wpdb->term_taxonomy.taxonomy = 'category' ";
$include_cats = "'" . implode("', '", $q['category__in']) . "'";
$whichcat .= " AND $wpdb->term_taxonomy.term_id IN ($include_cats) ";
}
Hier muß die Zuweisung (am besten auskommentieren):
$include_cats = "'" . implode("', '", $q['category__in']) . "'";
in diese geändert werden.
$include_cats = "'" . $q['category__in'][0] . "'";
2. Methode funktioniert mit Permalinks in allen anderen Modi:
in der gleichen Datei ~Zeile 1086 steht dieser Code
$join = " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) ";
$whichcat = " AND $wpdb->term_taxonomy.taxonomy = 'category' ";
$in_cats = array($q['cat']);
$in_cats = array_merge($in_cats, get_term_children($q['cat'], 'category'));
$in_cats = "'" . implode("', '", $in_cats) . "'"; // <-- das muß geändert werden
$whichcat .= "AND $wpdb->term_taxonomy.term_id IN ($in_cats)";
$groupby = "{$wpdb->posts}.ID";
hier muß diese Zeile
$in_cats = "'" . implode("', '", $in_cats) . "'";
in das geändert werden
$in_cats = "'" . $in_cats[0] . "'";
Das wars!!!
Viel Spaß damit