web-dev-qa-db-fra.com

WordPress "include TEMPLATEPATH" ou?

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

1
Fnarp

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 URL
  • get_stylesheet_directory()/get_template_directory() renvoie un chemin de fichier
  • Les quatre fonctions *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 SSL

Ainsi, 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. )

5
Chip Bennett

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' );
1
kaiser