wake-up-neo.net

Fügen Sie Sie eigenen Beitragstypen zum Widget "Kategorien" hinzu

Also habe ich ein ziemlich einfaches Setup, ein CPT mit den Standardwerten category und post_tag als Taxonomien.

Angenommen, ich habe 1 Beitrag und 1 CPT-Eintrag, die derselben Kategorie zugewiesen sind. Ich muss dies auch im Kategorie-Widget widerspiegeln.

Ich habe es geschafft, beide über den Filter request auf der Kategorieseite anzuzeigen, damit die vom Widget generierten Links funktionieren.

Das Problem ist, dass das Widget keinen Link für die Kategorie generiert, wenn der Beitrag nicht vorhanden ist (wenn es als leer betrachtet wird).

Die Elementanzahl ist außerdem falsch 1 statt 2.

Das Durchstöbern des Widget-Codes verursacht die folgenden Probleme:

wp_list_categories(apply_filters('widget_categories_args', $cat_args));

Ich kann also die Argumente über den Filter ändern, aber wp_list_categories() hat kein Argument dafür, welchen Beitragstyp er verwenden soll.

Ich habe gesehen, dass jemand anderes auf das Problem gestoßen ist:

http://wordpress.org/support/topic/custom-post-types-and-category-widget - kein Glück

http://themehybrid.com/support/topic/custom-post-types-and-category-widget - derselbe Typ kann Justins Antworten nicht lesen, aber ich nehme kein Glück mehr an. Er reichte am Ende eine Karte ein, die geschlossen wurde

Gedanken zur Lösung

Ich möchte wirklich nicht den Standard-Widget-Code kopieren/einfügen und einen neuen erstellen, sondern dies mithilfe eines Filters irgendwie lösen.

Aber würde ein Custom Walker dabei helfen? Irgendwelche Ideen?

Als Nebenbemerkung habe ich ein ähnliches Problem mit dem Archiv-Widget folgendermaßen gelöst:

/*
* Add CPTs to wp_get_archives()
* http://bajada.net/2010/07/15/adding-custom-post-types-to-wp_get_archives
*/
function ucc_getarchives_where_filter( $where , $r ) {
    $args = array( 'public' => true , '_builtin' => false );
    $output = 'names'; $operator = 'and';

    $post_types = get_post_types( $args , $output , $operator );
    $post_types = array_merge( $post_types , array( 'post' ) ); $post_types = "'" . implode( "' , '" , $post_types ) . "'";

    return str_replace( "post_type = 'post'" , "post_type IN ( $post_types )" , $where );
}
add_filter( 'getarchives_where' , 'ucc_getarchives_where_filter' , 10 , 2 ); 

Prost!

3
GreenDude

Ich habe ein "Schauspieler" -CPT und es scheint automatisch zu der Abfrage hinzugefügt zu werden:

SELECT object_id, term_taxonomy_id
FROM wp_term_relationships INNER JOIN wp_posts ON object_id = ID 
WHERE term_taxonomy_id IN (38,40,30,11,32,34,29,39,35,9,31,19,33,37,42,41,27,25,36,1,26) 
AND post_type IN ('post', 'actor')
AND post_status = 'publish'

Call from: require, require_once, include, get_sidebar, get_template_part, locate_template, load_template, require, dynamic_sidebar, call_user_func_array, WP_Widget->display_callback, WP_Widget_Categories->widget, wp_list_categories, get_categories, get_terms, _pad_term_counts

(Verwenden des Debug Queries Plugins)

Und das ist die CPT-Definition:

register_post_type('actor', array(
  'public' => true,
  'labels' => $labels,
  'has_archive' => 'actors',
  'taxonomies' => array( 'category' )
));
1
scribu