Est-il possible de remplacer le résultat de get_template_part ()?

11

Je travaille sur un thème enfant. Je préfère strongment ne pas remplacer les fichiers de modèle principaux afin de préserver la simplicité du thème enfant et de minimiser la quantité de code et la maintenance à long terme.

Dans la boucle, le modèle index.php du thème parent utilise: get_template_part( 'content' );

qui importera content.php , je souhaite qu'il se comporte davantage comme get_template_part( 'content', get_post_format() ); ou similaire afin d'introduire différents modèles tels que content-apartown.php , etc., sans créer un index.php dans le thème de l'enfant, afin d'écraser le parent pour un changement de ligne unique.

get_template_part() est composé de:

function get_template_part( $slug, $name = null ) {

    do_action( "get_template_part_{$slug}", $slug, $name );
    $templates = array();
    $name = (string) $name;
    if ( '' !== $name )
        $templates[] = "{$slug}-{$name}.php";

    $templates[] = "{$slug}.php";
    locate_template($templates, true, false);
}

Il y a donc une action disponible, dans mon cas appelée get_template_part_content

Je peux m'attacher à l'action avec quelque chose comme:

add_action( 'get_template_part_content', 'child_post_styles', 10, 2 );

function child_post_styles ( $slug, $name ) {
    if( false == $name ){
        $name = get_post_format();
        $templates = array();
        if ( '' !== $name )
            $templates[] = "{$slug}-{$name}.php";

        $templates[] = "{$slug}.php";
        locate_template($templates, true, false);
    }
}

Cela entraîne évidemment une duplication de publication, une de ma fonction accrochée, qui peut afficher le modèle souhaité, et l'autre de l'appel locate_template normal dans get_template_part()

Je ne parviens pas à trouver un moyen d'y parvenir sans duplication ni fin de rendu de la page juste après avoir servi la partie de mon modèle en effectuant une opération stupide telle que break ou exit

.     
posée TomHarrigan 08.07.2014 - 20:07

4 réponses

3

Il n’ya pas d’accroche pour cela. Copiez le fichier index.php dans le thème enfant et modifiez le changement de ligne unique. Indiquez également à l’auteur du thème parent qu’ils doivent apporter les mêmes modifications à leur thème, par souci de souplesse.

    
réponse donnée Otto 08.07.2014 - 21:19
6

Je pense que ce que vous voulez accomplir n'est pas tout à fait possible. C'est vraiment ennuyant de ne pas avoir de filtre pour modifier les noms de fichiers modèles: (

J'ai une solution de contournement dessus cependant. Utilisons content.php pour la comparaison.

// content.php file 
$format = get_post_format();
if( '' != $format ){
    get_template_part( 'content-'. $format );
}
else{
    get_template_part( 'content-default' );
}

Je n'ai pas utilisé le second argument de get_template_part function, mais un suffixe sur le premier argument pour éviter les appels infinitifs sur le fichier content.php s'il n'y a pas de fichier 'content-'. $format .

    
réponse donnée Shazzad 08.07.2014 - 20:50
2

Eh bien, il existe une SOLUTION :

.
add_action('init', function(){ remove_all_actions('get_template_part_content'); });
add_action('get_template_part_content', 'yourFunc', 99, 2 );
function yourFunc ( $slug, $name ) {

    .........any codes here.............
    if ($name == 'header'){
       //but this will be executed before loading template... At this moment, Wordpress doesnt support any hooks for before/after LOAD_TEMPLATE...
    }
}

mais réfléchissez bien, dans quel crochet vous devez insérer cette action ... pour obtenir manuellement la position, utilisez, c’est-à-dire locate_template('content-header.php', false);

    
réponse donnée T.Todua 28.04.2015 - 15:51
0

Si vous souhaitez extraire un fichier appelé content-away.php, appelez la fonction comme suit:

get_template_part( 'content', 'aside' );

Le deuxième paramètre est le nom du fichier après le trait d'union. Si votre fichier est dans un sous-répertoire (templates / content-cote.php):

get_template_part( 'templates/content', 'aside' );

Est-ce ce que vous cherchez à faire?

    
réponse donnée Justin R 08.07.2014 - 20:18

Lire d'autres questions sur les étiquettes