WordPress : Comment remplacer la fonction locate_template ?

Publié par Jean-Michel le

J’essaie de remapper les fichiers de modèle de WordPress dans un sous-répertoire de mon thème (quelque chose comme un viewsdossier). 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_templatefonction 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.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *