Keine Sub-Kategorien im Loop von WordPress

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.

Kommentare

  
  1. Daniel sagt:

    Dieser Post machte meinen Tag! Danke.

  2. Jens sagt:

    An welcher Stelle der functions.php füge ich den Code ein?
    habe ihn ans Ende gestellt und erhalte die Fehlermeldung über die Zeile:
    add_filter( 'posts_where', 'fb_filter_where' );

  3. Helmut sagt:

    Jetzt wollte ich mich fast beim falschen bedanken....
    Diese Erweiterung der functions.php ist aus meiner Sicht ein muss will ich WordPress als CMS System einsetzen und die Kategorien als hierarchische Verzeichnisstruktur nutzen.

  4. Wolf Larsen sagt:

    Ist es denn möglich der oberen Funktion auch zu sagen, welche Unterkategorien ausgeschlossen werden sollen? Ich möchte z.B. nur Artikel von zwei Unterkategorien ausschließen.

    Danke,
    Wolf

  5. Wolf Larsen sagt:

    Servus Frank,

    der Code für das Ausnehmen der Subkategorien scheint bei mir nach dem Update auf 3.1 nicht mehr zu funktionieren. Die Oberkategorie bleibt leer, obwohl dort Artikel liegen. Wenn ich den Code aus meiner function lösche, dann habe ich wieder den gewohnten Anblick, also den WordPress-Standard. Danke!

    Wolf

  6. Michael sagt:

    Hi Frank!

    Habe Deinen Artikel zu diesem Thema auf wpengineer.com gelesen. Hast Du eine Idee, wieso der Code nicht mehr mit WP 3.1 funktioniert? Beim Einsatz des Codes in der functions.php wird in der Hauptkategorie überhaupt kein Artikel mehr angezeigt.

    • @Michael: prüfe mal diesen, sollte gehen:

      
      if ( !function_exists('fb_filter_child_cats') ) {
      	function fb_filter_child_cats( $cats ) {
      		global $wp_query, $wpdb;
      		if ( is_category() ) {
      			// get children ID's
      			if ( $excludes = get_categories( "child_of=" . $wp_query->get('cat') ) ) {
      				// set array with ID's
      				foreach ( $excludes as $key => $value ) {
      					$exclude[] = $value->cat_ID;
      				}
      			}
      			// remove child cats
      			if ( isset($exclude) && is_array($exclude) ) {
      				$cats .= " AND " . $wpdb->prefix . "term_relationships.term_taxonomy_id NOT IN (" . implode(",", $exclude) . ") ";
      			}
      		}
      		return $cats;
      	}
      	if ( !is_admin() ) {
      		add_filter( 'posts_where', 'fb_filter_child_cats' );
      	}
      }
      
  7. Michael sagt:

    Hallo Frank!

    Danke für Deine Rückmeldung, aber leider ist der von Dir gepostete Code mit dem von der wpengineer Seite identisch. Das funktioniert leider nicht.

    • @Michael: ja, der ist so gut wie immer der gleiche, da ich ja beide Blogs betreibe und update. Ich habe aber in einem Beispiel getestet und in den Archiven waren die child-cats nicht mehr gelistet. Was funktioniert nicht, wie sieht deine Ausleitung aus; also was passiert?

  8. Michael sagt:

    Hi!
    Wie in #8 beschrieben erscheinen mit diesem Code keine Artikel mehr in der Elternkategorie. Stattdessen erhalte ich dort eine Meldung, dass keine passenden Beiträge gefunden werden können (Meldung kommt aus der archive.php). Klicke ich auf eine Unterkategorie, werden mir dort die zugeordneten Artikel angezeigt. Wie gesagt, ist das erst seit WP 3.1 so. Vorher funktionierte es wie von Dir beschrieben.
    Beispiel WP 3.0.4
    Beispiel WP 3.1

    • @Michael: ich schaue nochmal, aber genau das habe ich im Test versucht - bei Darstellung der Elternkategorie waren nur die Artikel in dieser Kategorie enthalten, nicht die aus der Kinder-Kategorie.

    • @Michael: irgendwie hatte ich via Copy/paste den gleichen Code nochmal rein gepackt, teste nun mal meinen Kommentar

    • @Michale: ich denke, dass ich eine bessere Lösung habe, ohne DB-select, was es stabil gegenüber den WP Versionen macht:

      
      function fb_filter_child_cats($query) {
      	$child_cats = (array) get_term_children( $query->get('cat'), 'category');
      	
      	if ( !$query->is_admin )
      		$query->set( 'category__not_in', array_merge($child_cats) );
      	
      	return $query;
      }
      add_filter( 'pre_get_posts', 'fb_filter_child_cats' );
      
  9. Michael sagt:

    Hallo Frank!
    Sorry, für die späte Rückmeldung! Hab in letzter Zeit einiges zu tun und komm nur noch Abends zu den WP-Geschichten...

    Vielen vielen Dank! Der Code aus #9 funktioniert nun wieder. Super!

    Natürlich habe ich auch Deinen zweiten Versuch mal getestet, aber da werden die Unterkategorien nicht herausgefiltert und erscheinen demnach noch in den Elternkategorien.

    Trotzdem ein dickes Dankeschön für Deine Mühe! Ich schau aber die Tage nochmal rein, vielleicht hast Du ja noch eine Idee bezgl. #15.

    Gruß
    Michael

    • @Michael: ich denke ich habe eine Lösung gefunden, wenn man WP in De betreibt, dann habe ich die ID nicht in $query, daher ging es bei mir im englischen Blog, meine neue Version holt die Id aus dem Namen und ging eben in allen Tests.

      
      function fb_filter_child_cats($query) {
      	
      	$cat = get_term_by('name', $query->query_vars['category_name'], 'category');
      	$child_cats = (array) get_term_children( &$cat->term_id, 'category' );
      	// auch möglich
      	//$child_cats = (array) get_term_children( get_cat_id($query-%gt;query_vars['category_name']), 'category' );
      	
      	if ( !$query->is_admin )
      		$query->set( 'category__not_in', array_merge($child_cats) );
      	
      	return $query;
      }
      add_filter( 'pre_get_posts', 'fb_filter_child_cats' );
      
  10. Michael sagt:

    Hallo Frank!
    Sorry für die späte Rückmeldung! Habe nun mal Deine 2te Variante aus #17 getestet. Die scheint auch problemlos zu funktionieren. Super! Herzlichen Dank nochmal für Deine Arbeit!

  11. Wolf Larsen sagt:

    Hallo Frank!

    ich bin immer noch am tun wegen diesen ausgenommenen Unterkategorien. Mit 3.0.5 und dem alten Code ging alles wunderbar. Mit 3.1 brachte ich nichts zu stande. Nun mit 3.1.1 habe ich folgendes Verhalten: Der Code aus Beitrag 15 und 17 filtert überhaupt nichts, wie Standard also.

    Der Code aus Beitrag 9 ist besser, aber er lässt trotzdem eine andere Unterkategorie zu. Ich habe also alle meine Beiträge aus der Oberkategorie und zwei Beiträge aus einer Unterkategorie. Ich habe schon die Unterkategorie umbenannt, gelöscht und unter anderem Namen angelegt, nichts. Wenn ich die beiden Beiträge in eine andere schon angelegte Unterkategorie verschiebe, dann geht es. Sowas macht mich fast verrückt :-)

    Ich schwöre, dass es mit 3.0.5 schon ging :-)
    Die Kategorie zum schauen ist hier: http://tinyurl.com/67l3trl

    Danke,
    Wolf

  12. Wolf Larsen sagt:

    Hallo Frank,

    ich habe nochmal geforscht. Komischerweise ist es so, dass neue oder bis vor einiger Zeit angelegte Unterkategorien einfach nicht aus der Oberkategorie verschwinden. Schon ältere bestehende Unterkategorien werden aber ausgenommen. Da bin ich echt ratlos.

    Wolf

  13. Mark sagt:

    Hallo,

    ich habe das Problem, dass ich genau das umgekehrte benötige. Die Kategorie-Seiten zeigen bei mir nur die Artikel der Hauptkategorie und nicht auch die der Sub-Kategorien an.

    Weisst Du da evt. Rat?

    Danke

    Mark

© 2013, since 2005 bueltge.de [by:ltge.de] · Theme is built by ThemeShift