J'ai un plugin personnalisé exécutant la fonction suivante pour changer le modèle de page pour mes pages prédéfinies. Il fonctionne correctement sur le thème par défaut 2017, mais il est remplacé par le programme OptimizePressTheme.
function _plc_page_template ($template) {
$pages = _plc_get_custom_pages();
foreach ($pages as $slug => $title) {
if (is_page ($slug) && is_file (PLC_TEMPLATES . $slug . '.tpl.php')) {
$template = dirname (__FILE__) . '/templates/' . $slug . '.tpl.php';
}
}
return $template;
}
add_filter ('page_template', '_plc_page_template', 99999);
La fonction est toujours en cours d'exécution et renvoie la valeur du modèle, mais ne rend pas le modèle personnalisé une fois sur la page. Quelqu'un sait-il comment remplacer le modèle pour OptimizePress? Merci.
(La valeur de poids de 99999 correspondait à moi, j'essayais seulement de le déclencher après OptimiserPress.)
Il fallait passer le filtre au crochet template_include . Je ne sais pas si c'est la bonne façon de le faire, mais ça marche:
function _plc_template_include ($template) {
$pages = _plc_get_custom_pages();
foreach ($pages as $slug => $title) {
if (is_page ($slug) && is_file (PLC_TEMPLATES . $slug . '.tpl.php')) {
ob_start();
include PLC_TEMPLATES . $slug . '.tpl.php';
$content = ob_get_clean();
include PLC_TEMPLATES . 'content.tpl.php';
return;
}
}
include $template;
}
add_filter ('template_include', '_plc_template_include', 99999);
J'ai placé le contenu du modèle dans une variable et tout le contenu dans un seul modèle pour éviter de réécrire l'en-tête et le pied de page à chaque fois, mais j'aurais facilement pu simplement mettre:
include PLC_TEMPLATES . $slug . '.tpl.php';
return;
au lieu des méthodes ob_start & ob_get_clean.