Autor Vorlage, Filter Sidebar Widgets nach Autor?

Ich möchte meine Sidebar-Widgets (Tag Cloud, Kategorie, Archiv) filtern können, um nur die Tags / Kategorien / Monate anzuzeigen, die für einen bestimmten Autor in der Autorvorlage gelten.

Was ist der richtige Weg, um diese Widgets zu filtern oder zu ändern? Ich habe diese Seite im Codex gefunden, aber es scheint nicht, dass die nativen functionen für eines der Widgets eine Autor-ID als Parameter akzeptieren können.

Solutions Collecting From Web of "Autor Vorlage, Filter Sidebar Widgets nach Autor?"

Es ist ein wenig unhandlich, alle Beiträge von einem Autor zu erfassen und durch sie zu filtern, um nur eine Kategorieliste zurückzugeben. Wenn Sie die Standard-Widgets in der Seitenleiste verwenden und sie vom Autor nur für die Autorvorlage filtern lassen möchten, würde ich Ihnen den folgenden Ansatz vorschlagen.

Filtern Sie zuerst die Tag- und Kategorie-Widget-Abfragen nach Kategorien und Tags.

add_filter( 'widget_tag_cloud_args', 'filter_categories_by_author' ); add_filter( 'widget_categories_dropdown_args', 'filter_categories_by_author' ); add_filter( 'widget_categories_args', 'filter_categories_by_author' ); function filter_categories_by_author( $args ){ // only process if on the author template if( is_author() ){ $author_id = get_the_author_meta( 'ID' ); $taxonomy = !empty( $args['taxonomy'] ) ? $args['taxonomy'] : 'category'; // filter by including only IDs associated to the author $args['include'] = get_taxonomy_ids_by_author( $author_id, $taxonomy ); } return $args; } 

Verwenden Sie dann die abhängige Methode zum Abrufen von Taxonomie-IDs, die anhand der Benutzer-ID gefiltert wurden.

 function get_taxonomy_ids_by_author( $user_id, $taxonomy = 'category' ){ global $wpdb; return $wpdb->get_col( $wpdb->prepare( " SELECT DISTINCT(terms.term_id) as ID FROM $wpdb->posts as posts LEFT JOIN $wpdb->term_relationships as relationships ON posts.ID = relationships.object_ID LEFT JOIN $wpdb->term_taxonomy as tax ON relationships.term_taxonomy_id = tax.term_taxonomy_id LEFT JOIN $wpdb->terms as terms ON tax.term_id = terms.term_id WHERE 1=1 AND ( posts.post_status = 'publish' AND posts.post_author = %d AND tax.taxonomy = '%s' ) ORDER BY terms.name ASC ", $user_id, $taxonomy ) ); } 

Quelle: https://gist.github.com/codearachnid/9655690

Es gibt keine eingebaute Möglichkeit, dies zu tun, und ich weiß nicht, dass es vorher versucht wurde. Das heißt, die Werkzeuge sind alle da, du musst sie zusammensetzen.

Sie können die aktuelle Benutzer-ID mit $userid = wp_get_current_user()

Sie können dann alle Beiträge von einem Benutzer mit $posts = WP_Query('author='.$userid)

Durchlaufen Sie anschließend alle Posts des Autors und hängen Sie die Kategorien jedes Posts in einem Array an. Beispielsweise,

 $allCategories = Array(); foreach($posts as $post){ array_merge($allCategories, wp_get_post_categories($post->ID)) } 

Verwenden Sie dann die function array_unique() , um Duplikate zu entfernen.

Zuletzt, foreach durch jede Kategorie, und erhalten Sie einen Link zur Kategorie mit get_category_link()

Ich habe das nicht getestet, aber Sie könnten es versuchen

 add_action('pre_get_posts', callback); function callback( &$query ) { if ( is_author() ) { $query->set('author', get_the_author_meta('ID') ); } }