J'ai donc une configuration assez simple, un CPT avec les variables par défaut category
et post_tag
comme taxonomies.
Supposons que 1 poste et 1 entrée CPT soient affectés à la même catégorie. J'ai besoin que cela soit également reflété dans le widget de catégorie.
J'ai réussi à les afficher tous les deux sur la page de catégorie via le filtre request
pour que les liens générés par le widget fonctionnent.
Le problème est que si l'article n'existait pas, le widget ne générerait pas de lien pour la catégorie (le considérant vide).
En outre, le nombre d'éléments est incorrect, 1 au lieu de 2.
wp_list_categories(apply_filters('widget_categories_args', $cat_args));
Je peux donc modifier les arguments via le filtre, mais wp_list_categories()
ne dispose pas d'argument pour le type de message à utiliser.
http://wordpress.org/support/topic/custom-post-types-and-category-widget - pas de chance
http://themehybrid.com/support/topic/custom-post-types-and-category-widget - même mec, je ne peux pas lire les réponses de Justin mais je suppose à nouveau que rien ne va plus. il a déposé un billet à la fin qui a été fermé
J'aimerais vraiment ne pas copier/coller le code du widget par défaut et en créer un nouveau, mais résoudre ce problème en utilisant un filtre.
Cela étant dit, un marcheur personnalisé aiderait-il? Des idées?
En tant que note, j'ai résolu un problème similaire avec le widget Archives en utilisant ceci:
/*
* 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 );
À votre santé!
J'ai un cpt 'acteur' et il semble être automatiquement ajouté à la requête:
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
(Utilisation de Requêtes de débogage plugin)
Et voici la définition du CPT:
register_post_type('actor', array(
'public' => true,
'labels' => $labels,
'has_archive' => 'actors',
'taxonomies' => array( 'category' )
));