Existe-t-il un moyen d'utiliser get_template_part () avec des dossiers?

26

Je me demande s'il existe un moyen d'utiliser get_template_part () avec des dossiers? Mon dossier principal contient maintenant beaucoup de fichiers car je place chaque élément réutilisable dans un fichier séparé. Je voudrais alors les mettre dans des dossiers.

Il n'y a aucune information à ce sujet dans le Codex: http://codex.wordpress.org/Function_Reference/get_template_part

Paul
la source

Réponses:

40

En fait , vous pouvez, j'ai un dossier dans mon répertoire de thème appelé /partials/dans dans ce dossier , j'ai des fichiers tels que latest-articles.php, latest-news.phpet latest-statements.phpje charger ces fichiers en utilisant get_template_part()comme:

get_template_part('partials/latest', 'news');

get_template_part('partials/latest', 'articles');

get_template_part('partials/latest', 'statements');

N'oubliez pas d'omettre le .phpnom du fichier.

Ahmad M
la source
Merci! C'est tellement simple que c'est dommage que je ne l'ai pas découvert. J'étais convaincu que ce n'est pas possible car le Codex ne le mentionne pas. Cette question a apporté des réponses plus intéressantes, mais celle-ci est la plus simple, donc c'est probablement la plus utile pour une personne moyenne :) (alors laissez-la cochée avec une coche verte).
Paul
1
Heureusement, il est possible de modifier le Codex afin que la prochaine personne n'ait pas le même problème. :-)
Dalton
@Sebastien Vous pouvez en fait ex: <?php get_template_part('partials/file'); ?>
HauntedSmores
5

J'ai bien peur que non. Si le codex n'est pas quelque chose que vous aimeriez savoir, essayez de suivre le lien vers la source et regardez vous-même le code et essayez de le gérer.

J'ai jeté un œil et la fonction get_template_part est définie comme ci-dessous:

function get_template_part( $slug, $name = null ) {
    do_action( "get_template_part_{$slug}", $slug, $name );

    $templates = array();
    if ( isset($name) )
        $templates[] = "{$slug}-{$name}.php";

    $templates[] = "{$slug}.php";

    locate_template($templates, true, false);
}

À partir de cela, vous pouvez lire que la fonction get_template_part crée simplement un nom de fichier php prévu et appelle la fonction Locate_template. Ce n'est pas utile, j'ai donc également regardé la fonction Locate_template:

function locate_template($template_names, $load = false, $require_once = true ) {
    $located = '';
    foreach ( (array) $template_names as $template_name ) {
        if ( !$template_name )
            continue;
        if ( file_exists(STYLESHEETPATH . '/' . $template_name)) {
            $located = STYLESHEETPATH . '/' . $template_name;
            break;
        } else if ( file_exists(TEMPLATEPATH . '/' . $template_name) ) {
            $located = TEMPLATEPATH . '/' . $template_name;
            break;
        }
    }

    if ( $load && '' != $located )
        load_template( $located, $require_once );

    return $located;
}

Obtenez localiser les recherches de modèle pour le fichier php appelé à partir de get_template_part. Mais vous pouvez appeler Locate_template directement à partir de votre code. Et c'est utile.

Essayez ce code au lieu de la fonction get_template_part ('loop-sigle.php') (votre fichier se trouve dans mydir à l'intérieur de votre thème):

locate_template( 'mydir/loop-single.php', true, true );
david.binda
la source
Raccourci intéressant, je me demande s'il a des conséquences négatives sur la séquence de chargement ou le contenu du fichier.
lowtechsun
2

Les notes de fonction get_template_part()disent:

Notes
- Utilise: Locate_template ()
- Utilise: do_action () Appelle l'action 'get_template_part _ {$ slug}'.

Qui vous permet d'utiliser locate_template(), qui dit:

Recherche dans STYLESHEETPATH ​​avant TEMPLATEPATH afin que les thèmes héritant d'un thème parent puissent simplement surcharger un fichier.

Si vous définissez TEMPLATEPATHavec le sous-répertoire que vous souhaitez utiliser, get_template_part()recherchera les fichiers dans votre sous-répertoire.

Mike Madern
la source