( Note du modérateur: A été initialement intitulé: "Problème de type de message personnalisé?" )
J'ai des problèmes avec les types d'articles personnalisés où tout fonctionne très bien, à l'exception des barres latérales.
Voici du code de mon sidebar.php
:
<?php
if (is_home()) {
dynamic_sidebar('frontpage-sidebar');
}
if (is_single()) {
dynamic_sidebar('single-post-sidebar');
}
....
?>
Normalement, cela fonctionne bien, sauf que lorsque j'ouvre une seule page pour vérifier que le post 'frontpage-sidebar'
ne se charge pas, le 'single-post-sidebar'
se charge à la place. Où est le problème?
Voici le code de mon type de message personnalisé:
$labels = array(
'name' => _x('Tools', 'post type general name'),
'singular_name' => _x('Tool', 'post type singular name'),
'add_new' => _x('Add New', 'Tool'),
'add_new_item' => __('Add New Tool'),
'edit_item' => __('Edit Tool'),
'new_item' => __('New Tool'),
'view_item' => __('View Tool'),
'search_items' => __('Search Tools'),
'not_found' => __('No Tools found'),
'not_found_in_trash' => __('No Tools found in Trash'),
'parent_item_colon' => ''
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'hierarchical' => false,
'menu_position' => 2,
'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments','page-attributes') // 'not sure that post can have page-attributes ????'
);
register_post_type('tools', $args);
Comment charger différentes barres latérales sur différentes pages lorsque j'utilise des types de publication personnalisés au lieu de publications ordinaires?
Merci.
Si je comprends bien votre question, les utilisateurs demandent pourquoi is_home()
est false
lorsque vous consultez l'URL /tools/example-tool/
? Si je comprends votre question, la réponse est simplement que is_home () n'est pas true
pour les types de publication personnalisés.
En fait, is_home()
ne devrait jamais être true
, sauf pour 1.) lorsque la liste des publications de la page d'accueil est affichée, ou 2.) lorsqu'un "page statique" a été défini pour être un "page des publications" dans la section Paramètres> Lecture de l'administrateur (Dans ma capture d'écran, ma "page de messages" a été définie sur une "Page" - post_type=='page'
- dont le titre est "Accueil") :
(source: mikeschinkel.com )
Donc, si vous voulez que la barre latérale apparaisse, je pense que vous devrez utiliser un critère différent de celui de is_home()
. Pouvez-vous décrire en mots ce que vous tentiez d'accomplir avec ce code?
D'après les commentaires ci-dessous et recherches ultérieures après une meilleure compréhension du problème, il apparaît les valeurs appropriées pour is_home()
et is_single()
n'ont jamais été réellement définies pour les types de publication personnalisés . Une des meilleures solutions au problème consiste donc à créer une page de modèle de thème spécifique au type de publication, c'est-à-dire single-tools.php
si le type de publication est tools
, et à définir des barres latérales spécifiquement pour ce type de publication. Mais si vous devez tout diriger via un single.php
, voici quelques fonctions que vous pouvez utiliser à la place de is_home()
et is_single()
pour obtenir les résultats escomptés et que vous pouvez stocker dans le fichier functions.php
de votre thème (ou un des fichiers d'un plugin)} _:
function is_only_home() {
$post_type = get_query_var('post_type');
return is_home() && empty($post_type);
}
function is_any_single() {
$post_type = get_query_var('post_type');
return is_single() || !empty($post_type);
}
Prendre votre premier exemple de code ci-dessus et appliquer ces fonctions ressemblerait à ceci:
<?php
if (is_only_home()) {
dynamic_sidebar('frontpage-sidebar');
}
if (is_any_single()) {
dynamic_sidebar('single-post-sidebar');
}
....
?>
La fonction que vous souhaitez utiliser: is_singular($post_types)
où $post_types
est une chaîne/un tableau de types de publication personnalisés. La fonction retourne vrai si une page singulière est affichée.