Je travaille sur un thème enfant, je préfère fortement ne pas remplacer les fichiers de modèle principaux afin de maintenir la simplicité du thème enfant ainsi que de minimiser la quantité de code et de maintenance au fil du temps.
Dans la boucle, le modèle index.php du thème parent utilise:
get_template_part( 'content' );
qui apportera content.php , je cherche à ce qu'il se comporte plus comme get_template_part( 'content', get_post_format() );
ou similaire afin d'apporter différents modèles tels que content-apart.php , etc., sans créer un index.php dans le thème enfant pour écraser le parent pour un changement de ligne unique.
get_template_part()
consiste en:
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é get_template_part_content
Je peux accrocher à 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);
}
}
Il en résulte évidemment une post-duplication, l'une de ma fonction hookée, qui peut afficher le modèle souhaité, et l'autre de l' locate_template
appel normal dansget_template_part()
J'ai du mal à trouver un moyen d'accomplir cela sans duplication, ou sans terminer le rendu de page juste après avoir servi ma partie de modèle en faisant quelque chose de stupide comme un break
ouexit
la source
Réponses:
Il n'y a pas de crochet pour le faire. Copiez index.php dans le thème enfant et modifiez la ligne unique. En outre, dites à l'auteur du thème parent qu'il doit faire le même changement dans son thème, pour plus de flexibilité.
la source
ob_start
intérieur etob_end
un crochet ultérieur afin qu'il soit exécuté mais jamais répété, ce qui est généralement suffisant. Ou vous pouvez utiliser exit () pour forcer la terminaison de PHP (après avoir ajouté manuellement tout ce qui manque: pied de page, etc.)Je pense que ce n'est pas exactement possible de la manière que vous voulez atteindre. C'est vraiment ennuyeux de ne pas avoir de filtre pour modifier les noms des fichiers de modèle :(
J'ai une solution de contournement cependant. Utilisons
content.php
pour la comparaison.Je n'ai pas utilisé le deuxième argument de la
get_template_part
fonction, j'ai plutôt passé le suffixe sur le premier argument pour éviter les appels infinitifs dans lecontent.php
fichier s'il n'y a pas de'content-'. $format
fichier.la source
Eh bien, il y a une SOLUTION :
mais réfléchissez bien, dans quel crochet vous devez insérer cette action ... pour obtenir manuellement l'emplacement, l'utilisation, c'est-à-dire
locate_template('content-header.php', false);
la source
Si vous voulez extraire un fichier appelé content-apart.php, vous appelez la fonction comme ceci:
Le deuxième paramètre est le nom du déclarant après le trait d'union. Si votre fichier se trouve dans un sous-répertoire (templates / content-apart.php):
C'est ce que vous cherchez à faire?
la source