Bonsoir,
J'ai un phénomène bizarre sur un site WordPress:
J'ai déclaré un custom post type ( CPT ) 'lgmac_media' qui fonctionne parfaitement, avec un slug 'disc'.
le template que j'ai créé: archive-lgmac_media.php affiche parfaitement les éléments de ce CPT (avec le permalien http://mon-site/disc/ ).
Maintenant je créé une taxonomie 'genre_mus' pour mon CPT, avec un slug 'style'
Je crée un template taxonomy.php et le permalien http://mon-site/style/rock/ utilise bien ce template taxonomy.php mais la boucle ne trouve rien à afficher.. (bien sur j'ai créé la valeur 'rock' dans la taxonomie genre_mus et j'ai affecté des éléments du CPT à cette taxonomie)
si je rajoute un var_dump( $wp_query); dans taxonomy.php, je vois que le CPT lgmac_media n'est pas dans wp_posts.post_type IN ('post', 'page', 'attachment')
j'ai donc rajouté ce type de contenu à la requête via le hook pre_get_post, mon CPT s'affiche, mais je perds le menu, donc je rajoute ensuite nav_menu_item à la requête via pre_get_post et là je récupère aussi le menu..
ça me parait bizarre d'avoir à faire cela: si le bon template est exécuté (taxonomy.php), ça veut bien dire que WordPress a déterminé qu'il devait afficher des éléments correspondants à une taxonomie me semble t-il...?
Et le pire c'est que sur un autre site j'avais déjà utilisé ce contexte et ça fonctionnait sans que j'intervienne sur pre_get_post...
Modifié par lionel_css3 (14 Mar 2017 - 22:31)
J'ai un phénomène bizarre sur un site WordPress:
J'ai déclaré un custom post type ( CPT ) 'lgmac_media' qui fonctionne parfaitement, avec un slug 'disc'.
//===================================================================
//============== custom post type lgmac_media
//===================================================================
//Initialize custom post type lgmac-media
function lgmac_media_init() {
$labels = array(
'name' => 'Discothèque',
'singular_name' => 'CD',
'add_new' => 'Ajouter un élément',
'add_new_item' => 'Ajouter un élément de la Discothèque',
'edit_item' => 'Modifier un élément de Discothèque',
'new_item' => 'Nouveau media',
'all_items' => 'Voir la liste',
'view_item' => 'Voir l\'élément',
'search_item' => 'Chercher un media',
'not_found' => 'Aucun élément trouvé',
'not_found_in_trash' => 'Aucun media dans la corbeille',
'menu_name' => 'Discothèque'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'publicly_queryable' => true,
'query_var' =>true,
'rewrite' => array('slug' => 'disc'),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 5,
'menu_icon' => get_stylesheet_directory_uri() . '/assets/disc_16.png',
'exclude_from_search' => true,
'supports' => array('title', 'editor', 'thumbnail')
);
register_post_type('lgmac_media', $args);
} // end function lgmac_media_init
//----------------Action hook to initialize the custom post type lgmac_media
add_action('init', 'lgmac_media_init');
le template que j'ai créé: archive-lgmac_media.php affiche parfaitement les éléments de ce CPT (avec le permalien http://mon-site/disc/ ).
Maintenant je créé une taxonomie 'genre_mus' pour mon CPT, avec un slug 'style'
//===================================================================
//============== custom taxonomy pour lgmac-media
//===================================================================
function lgmac_define_taxononomy_disco() {
$labels = array(
'name' => 'Styles Musicaux',
'singular_name' => 'style',
'all_items' => 'tous les styles²',
'edit_item' => 'modifier le style',
'update_item' => 'mettre à jour le style',
'add_new_item' => 'ajouter un style',
'search_items' => 'Rechercher dans les styles',
'new_item_name' => 'nouveau nom du style',
'menu_name' => 'styles des disques'
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'hierarchical' => true,
'query_var' => true,
'rewrite' => array('slug' => 'style'),
'show_admin_column' => true
);
register_taxonomy('genre_mus','lgmac_media', $args);
}
// ----------Action hook to create taxonomy
add_action('init', 'lgmac_define_taxononomy_disco');
Je crée un template taxonomy.php et le permalien http://mon-site/style/rock/ utilise bien ce template taxonomy.php mais la boucle ne trouve rien à afficher.. (bien sur j'ai créé la valeur 'rock' dans la taxonomie genre_mus et j'ai affecté des éléments du CPT à cette taxonomie)
si je rajoute un var_dump( $wp_query); dans taxonomy.php, je vois que le CPT lgmac_media n'est pas dans wp_posts.post_type IN ('post', 'page', 'attachment')
// extrait du var_dump de $wp_query
//
public 'request' => string 'SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) WHERE 1=1 AND (
wp_term_relationships.term_taxonomy_id IN (18)
) AND wp_posts.post_type IN ('post', 'page', 'attachment') AND (wp_posts.post_status = 'publish' OR wp_posts.post_author = 1 AND wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 30' (length=433)
j'ai donc rajouté ce type de contenu à la requête via le hook pre_get_post, mon CPT s'affiche, mais je perds le menu, donc je rajoute ensuite nav_menu_item à la requête via pre_get_post et là je récupère aussi le menu..
//===================================================================
// ajoute lgmac_media et nav_menu_item
// à la requete par défaut pour taxonomy.php
//===================================================================
function lgmac_media_in_main_query($query) {
if (is_tax( 'genre_mus') ) {
$query->set( 'post_type', array( 'post', 'page', 'nav_menu_item', 'lgmac_media' ));
}
}
add_action('pre_get_posts', 'lgmac_media_in_main_query');
ça me parait bizarre d'avoir à faire cela: si le bon template est exécuté (taxonomy.php), ça veut bien dire que WordPress a déterminé qu'il devait afficher des éléments correspondants à une taxonomie me semble t-il...?
Et le pire c'est que sur un autre site j'avais déjà utilisé ce contexte et ça fonctionnait sans que j'intervienne sur pre_get_post...
Modifié par lionel_css3 (14 Mar 2017 - 22:31)