J'ai créé plusieurs types de publication personnalisés avec des archives définies sur true avec un slug personnalisé. Cependant, toutes ces archives ont la classe de corps blog
et home
et aucune classe associée au type de publication.
J'utilise <body <?php body_class(); ?>>
dans le fichier d'en-tête qui est appelé sur chaque page, mais de toute façon, il ne reconnaît pas ces pages en tant que cpt-archives.
Cette fonctionnalité est-elle attendue ou est-il plus probable que j'ai commis une erreur en codant les types de modèles/publications?
Mon code de type de poste (Tous les codes CPT sont codés de la même manière, variations mineures):
function publikasjoner() {
register_post_type( 'publikasjoner',
array( 'labels' => array(
'name' => __( 'Publikasjoner', 'bonestheme' ),
'singular_name' => __( 'Publikasjon', 'bonestheme' ),
'all_items' => __( 'Alle publikasjoner', 'bonestheme' ),
'add_new' => __( 'Ny publikasjon', 'bonestheme' ),
'add_new_item' => __( 'Legg til ny publikasjon', 'bonestheme' ),
'edit' => __( 'Rediger', 'bonestheme' ),
'edit_item' => __( 'Rediger publikasjoner', 'bonestheme' ),
'new_item' => __( 'Ny publikasjon', 'bonestheme' ),
'view_item' => __( 'Vis publikasjon', 'bonestheme' ),
'search_items' => __( 'Søk etter publikasjon', 'bonestheme' ),
'not_found' => __( 'Fant ingenting i databasen.', 'bonestheme' ),
'not_found_in_trash' => __( 'Fant ingenting i søppelkassen', 'bonestheme' ),
'parent_item_colon' => ''
),
'description' => __( 'Østlandsforsknings publikasjoner legges til her', 'bonestheme' ),
'public' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'show_ui' => true,
'query_var' => true,
'menu_position' => 9,
'menu_icon' => 'dashicons-edit',
'rewrite' => array( 'slug' => 'publikasjoner', 'with_front' => false ),
'has_archive' => 'publikasjoner',
'capability_type' => 'post',
'hierarchical' => true,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'custom-fields', 'revisions')
)
);
register_taxonomy_for_object_type( 'emne', 'publikasjoner' );
register_taxonomy_for_object_type( 'emneord', 'publikasjoner' );
register_taxonomy_for_object_type( 'emne', 'type_publikasjon' );
}
Il existe un filtre appelé body_class
pour cela.
function my_own_body_classes($classes) {
// Add Classes to body if the post type archive is 'publikasjoner'
if ( is_post_type_archive( 'publikasjoner' ) ) {
$classes[] = 'publikasjoner-archive';
}
// Go for other posts types here
return $classes;
}
add_filter('body_class', 'my_own_body_classes');
Vous pouvez passer n'importe quelle classe ou tableau de classes à la fonction de classe body. Donc, si vous deviez déterminer qu'il s'agit bien de la page pour 'publikasjoner', vous pouvez ajouter cette classe à la classe body comme ceci:
body_class('publikasjoner');
Vous pouvez vérifier si vous êtes sur une page d'archive d'un type de message avec is_post_type_archive()
.
Alors tu peux faire:
$cpt_class = "not-a-cpt";
if(is_post_type_archive('publikasjoner')){
$cpt_class = 'publikasjoner';
}
?><html stuff><?php
body_class($cpt_class);
Tu as dit:
J'ai le filtre body_class () à l'intérieur de la balise body dans le fichier header.php, qui est appelé à chaque page.
Et le fait que
Vous devriez voir beaucoup plus de classes.
Cela présente les symptômes d’une erreur classique (que j’ai fait beaucoup de temps). Assurez-vous que le filtre sur body_class retourne ce qu’il devrait, par exemple. c'est faux:
add_filter('body_class', function($classes){
global $post;
if ( 'foobar' === $post->post_type ) {
$classes[] = 'barfoo';
return $classes;
}
});
et ne pas retourner les classes, ce qui pourrait ralentir le processus et devrait être fait comme tel:
add_filter('body_class', function($classes){
global $post;
if ( 'foobar' === $post->post_type ) {
$classes[] = 'barfoo';
}
return $classes;
});
Si vous ne retournez pas sur un filtre, ce qui serait le cas de mon premier (mauvais) exemple, la valeur sera annulée.
Je ne suis pas sûr que cela aide, mais je l'ai accidentellement fait par le passé.