WordPress : Comment remplacer la fonction locate_template ?
J’essaie de remapper les fichiers de modèle de WordPress dans un sous-répertoire de mon thème (quelque chose comme un views
dossier). J’ai essayé quelques crochets que j’ai trouvés sur la documentation WordPress, mais rien n’a fonctionné comme prévu.
En analysant la fonction principale qui « inclut » les fichiers de modèle du thème, j’ai trouvé la locate_template
fonction sur le fichier wp-includes/template.php . Je veux remplacer cette fonction pour atteindre ce que je veux.
Ainsi, le corps de la fonction d’origine est :
function locate_template( $template_names, $load = false, $require_once = true, $args = array() ) {
$located = '';
foreach ( (array) $template_names as $template_name ) {
if ( ! $template_name ) {
continue;
}
if ( file_exists( STYLESHEETPATH . '/' . $template_name ) ) {
$located = STYLESHEETPATH . '/' . $template_name;
break;
} elseif ( file_exists( TEMPLATEPATH . '/' . $template_name ) ) {
$located = TEMPLATEPATH . '/' . $template_name;
break;
} elseif ( file_exists( ABSPATH . WPINC . '/theme-compat/' . $template_name ) ) {
$located = ABSPATH . WPINC . '/theme-compat/' . $template_name;
break;
}
}
if ( $load && '' !== $located ) {
load_template( $located, $require_once, $args );
}
return $located;
}
Et le remplacement consiste simplement à ajouter un views/
au chemin que WordPress recherche pour les fichiers de modèle, comme ceci :
function locate_template( $template_names, $load = false, $require_once = true, $args = array() ) {
$located = '';
foreach ( (array) $template_names as $template_name ) {
if ( ! $template_name ) {
continue;
}
if ( file_exists( STYLESHEETPATH . '/views/' . $template_name ) ) {
$located = STYLESHEETPATH . '/views/' . $template_name;
break;
} elseif ( file_exists( TEMPLATEPATH . '/views/' . $template_name ) ) {
$located = TEMPLATEPATH . '/views/' . $template_name;
break;
} elseif ( file_exists( ABSPATH . WPINC . '/theme-compat/' . $template_name ) ) {
$located = ABSPATH . WPINC . '/theme-compat/' . $template_name;
break;
}
}
if ( $load && '' !== $located ) {
load_template( $located, $require_once, $args );
}
return $located;
}
Je sais que la modification des fonctions principales est une (GROSSE) erreur, donc ce que je veux, c’est remplacer cette fonction à partir du fichier functions.php de mon thème. Je pense que j’ai juste besoin de re-déclarer cette fonction sur un crochet d’initialisation, mais je ne trouve pas quel crochet utiliser (et si c’est la bonne façon de le faire).
Quelqu’un peut il m’aider avec ça?
Solution n°1 trouvée
« J’essaie de remapper les fichiers de modèle de WordPress dans un sous-répertoire de mon thème »
Pourquoi? Utilisez un thème enfant. Tout le reste serait fragile et sujet aux erreurs.
Envisagez d’utiliser un fichier htaccess pour le remappage.
0 commentaire