Filtern von Posts durch mehrere Taxonomie-Begriffe wie in einem Admin Post-Eintrag?

Nach dem Lesen Hinzufügen eines Taxonomie-Filters zur Admin-Liste für einen benutzerdefinierten Beitragstyp? Ich habe es versucht, aber ich konnte es nicht schaffen, zwei (2) verschiedene Taxonomien gleichzeitig zu filtern. Das System filtert nur die letzte Taxonomie und ignoriert eine andere.

Kann jemand zwei Taxonomien gleichzeitig filtern?

Solutions Collecting From Web of "Filtern von Posts durch mehrere Taxonomie-Begriffe wie in einem Admin Post-Eintrag?"

Ich habe momentan nicht die Zeit, um ein funktionierendes Beispiel für dich zu schreiben, aber da du um Hilfe in E-Mails gebeten hast, dachte ich, ich würde dich in die richtige Richtung weisen.

Wie Sie vielleicht wissen oder nicht, ist dies nicht wirklich ein Problem für die Admin-Post-Liste; Der meiste Code sollte gut funktionieren. Das Problem ist, dass WordPress derzeit keine Möglichkeit hat, query_posts() / get_posts() / WP_Query zu verwenden, um nach mehr als einem Taxonomiebegriff zu filtern, ohne Hooks zu verwenden. (Es gibt eine sehr gute Chance, dass sich das in Version 3.1 ändern wird; wir können nur hoffen!)

Die Lösung besteht darin, einen 'posts_where' wie hier mit der für diese Antwort geschriebenen function ” tax_terms_where() :

  • Den Schnittpunkt von zwei benutzerdefinierten Taxonomiebegriffe für einen benutzerdefinierten Beitragstyp erhalten?

Sie müssen auch den 'parse_query' Hook modifizieren, um Ihre Filterwerte zu erfassen, in etwa so (ich habe das nicht getestet, daher kann es kleine Syntaxerrors geben):

 < ?php add_filter('parse_query','yoursite_parse_query'); function yoursite_parse_query($query) { global $pagenow; $qv = &$query->query_vars; if ($pagenow=='edit.php') { $tax_terms = array(); if (!empty($qv['marka'])) $tax_terms[] = "marka:{$qv['marka']}"; if (!empty($qv['konu'])) $tax_terms[] = "konu:{$qv['konu']}"; if (count($tax_terms)) $qv['tax_terms'] = implode(',',$tax_terms); } } 

Das obige nimmt an, dass Sie Dropdown-Listen mit den Namen 'marka' und 'konu' . Wahrscheinlich müssen Sie WordPress auch mitteilen, dass sie sie als Abfrage-Vars mit einem 'admin_init' Hook erkennen. Wieder habe ich das nicht getestet, also hoffe ich, dass es wie geschrieben funktioniert:

 add_action('init','yoursite_init'); function yoursite_init() { global $wp; $wp->add_query_var('marka'); $wp->add_query_var('konu'); } 

Das ist alles. Kombiniere das Wissen der drei Beiträge; dieses eine, das auf Admin-Listen und das auf mehreren Taxonomie-Abfragen und ich denke, dass Sie es erledigen werden. Vielleicht möchten Sie sogar Ihre Lösung veröffentlichen, damit andere davon lernen können. Lass es mich wissen, wenn du nicht weiterkommst.

Späte Antwort

Update für WordPress 3.5 und höher

Ich habe das folgende Plugin geschrieben, um die WP_List_Table s für integrierte und benutzerdefinierte Post-Typen mit den folgenden Features zu erweitern:

  • Spalte show_admin_column (wenn show_admin_column auf false )
  • Fügen Sie die Taxons inkl. Links zu der Tabellenzelle
  • Fügen Sie ein Dropdown-Feld hinzu, in dem die Anzahl der dem Taxon zugewiesenen Posts angezeigt wird, um die angezeigten Posts zu filtern
  • Lassen Sie das Filtern nach mehr als einer Taxonomie zu

Hier ist das Plugin (am besten als mu-plugin):

 add_action( 'plugins_loaded', array( 'WCM_Admin_PT_List_Tax_Filter', 'init' ) ); class WCM_Admin_PT_List_Tax_Filter { private static $instance; public $post_type; public $taxonomies; public $new_cols = array(); static function init() { null === self :: $instance AND self :: $instance = new self; return self :: $instance; } public function __construct() { add_action( 'load-edit.php', array( $this, 'setup' ) ); } public function setup() { add_action( current_filter(), array( $this, 'setup_vars' ), 20 ); add_action( 'restrict_manage_posts', array( $this, 'get_select' ) ); add_filter( "manage_taxonomies_for_{$this->post_type}_columns", array( $this, 'add_columns' ) ); } public function setup_vars() { $this->post_type = get_current_screen()->post_type; $this->taxonomies = array_diff( get_object_taxonomies( $this->post_type ) ,get_taxonomies( array( 'show_admin_column' => 'false' ) ) ); } public function add_columns( $taxonomies ) { return array_merge( $taxonomies ,$this->taxonomies ); } /** * Select form element to filter the post list * @return string HTML */ public function get_select() { $html = ''; foreach ( $this->taxonomies as $tax ) { $options = sprintf( '' ,__( 'View All' ) ,get_taxonomy( $tax )->label ); $class = is_taxonomy_hierarchical( $tax ) ? ' class="level-0"' : ''; foreach ( get_terms( $tax ) as $taxon ) { $options .= sprintf( '' ,isset( $_GET[ $tax ] ) ? selected( $taxon->slug, $_GET[ $tax ], false ) : '' ,'0' !== $taxon->parent ? ' class="level-1"' : $class ,$taxon->slug ,'0' !== $taxon->parent ? str_repeat( ' ', 3 ) : '' ,"{$taxon->name} ({$taxon->count})" ); } $html .= sprintf( '' ,$tax ,$tax ,$options ); } return print $html; } } 

Erläuterung

Zuerst habe ich ein tolles, aber großes show_admin_column , um die benutzerdefinierten Spalten zu erhalten (wusste nicht über das 3.5 Update für show_admin_column ). Dann habe ich viel parse_query , um parse_query zu parse_query , um sie nach zwei Taxonomien zu filtern. Zum Glück hatte ich sofort ein überraschendes Ergebnis (ohne Code hinzugefügt). Sehen Sie sich den folgenden Beispiel-Dump an:

  public 'tax_query' => object(WP_Tax_Query)[429] public 'queries' => array (size=2) 0 => array (size=5) 'taxonomy' => string 'post_format' (length=11) 'terms' => array (size=1) 0 => string 'post-format-gallery' (length=19) 'include_children' => boolean true 'field' => string 'slug' (length=4) 'operator' => string 'IN' (length=2) 1 => array (size=5) 'taxonomy' => string 'category' (length=8) 'terms' => array (size=4) 0 => int 5 1 => int 6 2 => int 7 3 => int 8 'include_children' => boolean false 'field' => string 'term_id' (length=7) 'operator' => string 'IN' (length=2) public 'relation' => string 'AND' (length=3) 

WP macht das schon standardmäßig!