2010-07-07 4 views

Répondre

2

Comme de Wordpress 3.0, la logique wp-includes/template-loader.php pour sélectionner un modèle ressemble à ceci:

if (defined('WP_USE_THEMES') && WP_USE_THEMES) : 
    $template = false; 
    if  (is_404()   && $template = get_404_template()   ) : 
    elseif (is_search()   && $template = get_search_template()  ) : 
    elseif (is_tax()   && $template = get_taxonomy_template()  ) : 
    elseif (is_front_page()  && $template = get_front_page_template() ) : 
    elseif (is_home()   && $template = get_home_template()   ) : 
    elseif (is_attachment()  && $template = get_attachment_template() ) : 
     remove_filter('the_content', 'prepend_attachment'); 
    elseif (is_single()   && $template = get_single_template()  ) : 
    elseif (is_page()   && $template = get_page_template()   ) : 
    elseif (is_category()  && $template = get_category_template()  ) : 
    elseif (is_tag()   && $template = get_tag_template()   ) : 
    elseif (is_author()   && $template = get_author_template()  ) : 
    elseif (is_date()   && $template = get_date_template()   ) : 
    elseif (is_archive()  && $template = get_archive_template()  ) : 
    elseif (is_comments_popup() && $template = get_comments_popup_template()) : 
    elseif (is_paged()   && $template = get_paged_template()   ) : 
    else : 
     $template = get_index_template(); 
    endif; 
    if ($template = apply_filters('template_include', $template)) 
     include($template); 
    return; 
endif; 

Vérification get_category_template() dans wp-includes/theme.php` nous voyons:

function get_category_template() { 
    $cat_ID = absint(get_query_var('cat')); 
    $category = get_category($cat_ID); 

    $templates = array(); 

    if (!is_wp_error($category)) 
     $templates[] = "category-{$category->slug}.php"; 

    $templates[] = "category-$cat_ID.php"; 
    $templates[] = "category.php"; 

    $template = locate_template($templates); 
    return apply_filters('category_template', $template); 
} 

En supposant que votre catégorie est Foo, que c'est slug est foo, et que la catégorie Foo est 17, pour un article appartenant à la catégorie Foo, Wordpress vérifiera les modèles suivants dans votre thème et utiliser le premier qu'il trouve:

  • catégorie fichier foo.php
  • catégorie 17.php
  • category.php

Ainsi, tout ce que vous devez faire est de créer un modèle nommé category-foo.php dans votre répertoire de thème, et définir la catégorie de votre poste à Foo, et ce poste sera rendu en utilisant le modèle category-foo.php au lieu du modèle post.php par défaut.

Ce mécanisme de sélection de modèles est présent depuis Wordpress 1.5, bien que la liste complète des types de modèles ait considérablement augmenté au fil des ans.

La documentation Wordpress pour cela peut être trouvée here.

+0

Mon permalien est défini sur IDs. Chaque catégorie est donc référencée avec son ID. J'ai déjà fait un fichier de catégorie pour une catégorie "immobilier" avec id 3 comme catégorie-3.php, mais ce n'est pas en train d'être appliqué sur un post avec la catégorie "immobilier" .. –

+0

Le format permalien n'a rien à voir avec le mécanisme de sélection des modèles. Je vous ai donné où chercher pour déboguer ceci, mais vous allez devoir faire la recherche, puisque je ne sais pas (a) quelle version de Wordpress vous utilisez, (b) quel thème vous êtes en utilisant, (c) quels plugins vous avez installés, ou quoi que ce soit d'autre. Si je devais deviner, votre ID de catégorie de poste n'est pas vraiment 3 - renommer le modèle en catégorie-real-estate.php, et assurez-vous qu'il est lisible par le serveur web. –

+0

L'identifiant de catégorie est 3 correct. Quoi qu'il en soit, si les posts sont supposés avoir le modèle de la catégorie parente, et qu'il n'y a rien d'autre, alors je verrai à ce sujet. Mais dites-moi, que se passera-t-il pour un post qui a plusieurs catégories? –

Questions connexes