J'ai construit quelque chose comme ça:
Zone des widgets du conteneur d'index
et j'ai créé un widget pour cela -
Catégories Widget - Index Container .php
avec ceci dans:
<?php include (TEMPLATEPATH . '/includes/containers/container-grid-categories.php'); ?>
<?php ///include (TEMPLATEPATH . '/includes/containers/container-list-categories.php'); ?>
et par exemple dans /includes/containers/container-grid-categories.php
est-ce:
<?php //include (TEMPLATEPATH . '/includes/containers/container-grid-categories/grid-thumbs.php'); ?>
<?php include (TEMPLATEPATH . '/includes/containers/container-grid-categories/grid-tumbs-details.php'); ?>
Donc, mes questions, avec tout cela fonctionne bien, la question est-ce un bon moyen de faire ce que j'ai fait (inclure TEMPLATEPATH)? Ou utiliser un autre moyen, et si c'est quoi? Merci
Réponse courte: la meilleure réponse absolue, pour les fichiers de modèle figurant dans un sous-répertoire, consiste à utiliser locate_template()
Je recommanderais de référencer le chemin de la feuille de style pour le fichier de modèle , afin que ces fichiers de modèle soient facilement remplacés par les thèmes enfants. Donc, idéalement, vous devriez utiliser get_stylesheet_directory_uri()
.
Quelques différences/explications de toutes les fonctions listées par @kaiser:
get_stylesheet_directory_uri()
/get_template_directory_uri()
renvoie un URLget_stylesheet_directory()
/get_template_directory()
renvoie un chemin de fichier *get_*_directory_*()
effectuent une vérification SSL TEMPLATEPATH
/STYLESHEETHATH
sont des constantes simples, renvoient un chemin de fichier et ne pas effectuer une vérification SSLAinsi, les quatre fonctions get_*_directory_*()
sont préférables à utiliser TEMPLATEPATH
/STYLESHEET
; Cependant, ils ne sont pas vraiment destinés à la localisation de fichiers de modèle dans des sous-répertoires. Dans ce cas, la meilleure option consiste à utiliser locate_template()
directement. ( Voir ici pour une description détaillée et une comparaison de toutes les options ci-dessus. )
Il y a plusieurs façons d'y parvenir:
TEMPLATEPATH // Path to your (parent) themes root dir
STYLESHEETPATH // Path to your parent/child - if present - dir
get_template_directory_uri();
get_template_directory();
get_stylesheet_directory();
get_stylesheet_directory_uri();
// to load a file: path_and_file_name.php which searches in child dir first, then parent themes dir
get_template_part( 'path_and_file_name' ); // appends .php automagically
get_template_part( 'path_and_file_name', 'suffix' ); // loads: path_and_file_name-suffix.php
/**
* Directoy structure
* @return (array) $dir_struct | directory structure
*/
function wpse21093_get_dir_struct()
{
$dir_base = get_template_directory().'/includes/';
$dirs[] = 'containers';
// add more folders
// $dirs[] = 'widgets';
foreach ( $dirs as $dir )
{
$dir_struct[ $dir ] = trailingslashit( $dir_base.$dir );
}
return $dir_struct;
}
/**
* Loading files for larger structures the *smart* way ...
* Searches in all folders supported by the theme, defined by the user
* Allows a {$suffix} to be appended to mimic the get_template_part(); behavior
*/
function wpse21093_load_file( $file_name, $suffix = '' )
{
$dirs = wpse21093_get_dir_struct();
foreach ( $dirs as $supported => $dir )
{
if ( empty ( $suffix ) )
{
if ( file_exists( $dir.$file_name.'.php' ) )
require_if_theme_supports( $supported, $dir.$file_name.'.php' );
}
else
{
if ( file_exists( $dir.$file_name.'-'.$suffix.'.php' ) )
require_if_theme_supports( $supported, $dir.$file_name.'-'.$suffix.'.php' );
}
}
return;
}
// Then call it like this:
add_theme_support( 'containers' ); // add support for folder
wpse21093_load_file( 'container-grid-categories' );