web-dev-qa-db-fra.com

Est-il possible d'utiliser get_template_part () avec des dossiers?

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

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

25
Paul

En fait, vous pouvez, j’ai un dossier dans mon répertoire de thème appelé /partials/ dans ce dossier, j’ai des fichiers tels que latest-articles.php, latest-news.php et latest-statements.php et je charge 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 .php du nom du fichier.

38
Ahmad M

J'ai bien peur que non. Si vous n’êtes pas intéressé par le codex, essayez de suivre le lien vers la source, consultez le code et essayez de le gérer.

J'ai jeté un coup d'œil et la fonction get_template_part est définie comme suit:

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);
}

A partir de là, vous pouvez lire que cette fonction get_template_part crée simplement un nom de fichier php et appelle la fonction Locate_template. Cela n’est pas utile, j’ai donc jeté un coup d’œil également sur la fonction de location:

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 des recherches de modèle de localisation pour le fichier php appelé à partir de get_template_part. Mais vous pouvez appeler directement le modèle de localisation depuis votre code. Et c'est utile.

Essayez ce code à la place de la fonction get_template_part ('loop-sigle.php') (votre fichier se trouve dans le répertoire mydir de votre thème):

locate_template( 'mydir/loop-single.php', true, true );
5
david.binda

Les notes de fonction get_template_part() indiquent:

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

Ce qui vous permet d’utiliser locate_template() , qui dit:

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

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

2
Mike Madern