Je cherche depuis quelques heures un moyen de créer un modèle de page personnalisé à partir d'un plugin, mais je n'ai pas encore eu de chance.
Ce que j'essaie spécifiquement de faire est d'ajouter une option à la liste des modèles de page disponibles lors de la modification d'une page, et de ne pas utiliser une autre méthode commeif( is_page( 'page-slug' ) ) { /* etc */ }
Existe-t-il une variable globale que je peux modifier pour ce faire?
Éditer:
J'utilise actuellement ce code, basé sur le lien @ m0r7if3r m'a donné dans un commentaire, le problème est qu'il exécutera cette fonction lors de l'affichage de la page, mais pas lors de la modification de la page (pour remplir la liste déroulante avec les modèles de page) :
class JW_SiteGrader {
private static $instance;
private function __construct() {
add_action( 'template_redirect', array( &$this, 'sitegrader_template_redirect' ), 20 );
}
public static function getInstance() {
// Return the class data in a Singleton fashion
if (self::$instance == null)
self::$instance = new JW_SiteGrader();
return self::$instance;
}
public function sitegrader_template_redirect() {
add_filter( 'page_template', array( &$this, 'sitegrader_page_template' ), 10, 1 );
}
public function locate_plugin_template( $template_names, $load = false, $require_once = true ) {
if ( !is_array( $template_names ) )
return '';
$located = '';
$this_plugin_dir = WP_PLUGIN_DIR . '/' . str_replace( basename( __FILE__ ), '', plugin_basename( __FILE__ ) );
foreach ( $template_names as $template_name ) {
if ( !$template_name )
continue;
if ( file_exists( STYLESHEETPATH . '/' . $template_name ) ) {
$located = STYLESHEETPATH . '/' . $template_name;
break;
} else if ( file_exists( TEMPLATEPATH . '/' . $template_name ) ) {
$located = TEMPLATEPATH . '/' . $template_name;
break;
} else if ( file_exists( $this_plugin_dir . $template_name ) ) {
$located = $this_plugin_dir . $template_name;
break;
}
}
if ( $load && '' != $located )
load_template( $located, $require_once );
return $located;
}
public function sitegrader_page_template( $template ) {
$object = get_queried_object();
if ( 'page' == $object->post_type ) {
// New
$templates[] = "page-sitegrader.php";
// Like in core
$templates[] = "page-{$object->post_type}.php";
$templates[] = "page.php";
return locate_template( $templates );
}
// return apply_filters('page_template', $template);
return $template;
}
}
Modifier 2:
Il semble que cette fonctionnalité sera publiée dans une future mise à jour, j'ai lu pas mal de tickets Trac à ce sujet et il y a eu des discussions mais pas de vraie réponse (en espérant 3.4). Répertoriera ici les URL des tickets Trac.
Modifier 3:
Le code ci-dessus fonctionne, MAIS, le seul problème que je rencontre à ce stade est qu'aucun modèle n'est ajouté à la liste déroulante lors de la modification / ajout d'une nouvelle page. J'essaye quelques choses et mettrai à jour ma question bientôt.
page_template
hook, le code ci-dessus dans ma modification est ce qui est actuellement utilisé. Dois-je utiliser le template_redirect
crochet puis y ajouter le page_template
filtre?