Je suis un didacticiel plutôt obsolète sur les types de publication personnalisés. La dernière étape consiste à créer un modèle de page personnalisé, dans le but de montrer toutes les publications du type personnalisé au format liste d'archives. Selon les commentaires, les méthodes utilisées ne fonctionnent plus 6 ans plus tard (voir figure) et mon modèle de page personnalisé n'est pas une option lors de la création d'une nouvelle page.
Si je place mon modèle personnalisé dans le dossier du thème, cela fonctionne, mais l'option de le charger à partir du répertoire du plugin est brisée. Comment puis-je résoudre ce problème afin d'attribuer le modèle à une nouvelle page?
Modifier
Comme je comprends mieux maintenant, ce code est seulement _ charger le modèle lors de l'affichage de mes types d'articles personnalisés. La confusion était due au fait qu'il apparaisse comme un modèle disponible dans la section "Attributs de page" lorsqu'il se trouvait dans le répertoire Thèmes. Je souhaite qu'il soit disponible en option lors de la création d'une nouvelle page, mais que le fichier de modèle se trouve dans le répertoire de mon plugin.
Le code original du tutoriel:
add_filter( 'template_include', 'include_template_function', 1 );
function include_template_function( $template_path ) {
if ( get_post_type() == 'movie_reviews' ) {
if ( is_single() ) {
// checks if the file exists in the theme first,
// otherwise serve the file from the plugin
if ( $theme_file = locate_template( array ( 'single-movie_reviews.php' ) ) ) {
$template_path = $theme_file;
} else {
$template_path = plugin_dir_path( __FILE__ ) . '/single-movie_reviews.php';
}
}
}
return $template_path;
}
Pour ajouter un modèle personnalisé dans la section des modèles d'attributs de page, vous devez d'abord ajouter votre modèle au menu déroulant, puis le charger dans le crochet template_include
lorsque la page actuelle l'a sélectionné comme modèle actuel.
/**
* Add "Custom" template to page attirbute template section.
*/
function wpse_288589_add_template_to_select( $post_templates, $wp_theme, $post, $post_type ) {
// Add custom template named template-custom.php to select dropdown
$post_templates['template-custom.php'] = __('Custom');
return $post_templates;
}
add_filter( 'theme_page_templates', 'wpse_288589_add_template_to_select', 10, 4 );
/**
* Check if current page has our custom template. Try to load
* template from theme directory and if not exist load it
* from root plugin directory.
*/
function wpse_288589_load_plugin_template( $template ) {
if( get_page_template_slug() === 'template-custom.php' ) {
if ( $theme_file = locate_template( array( 'template-custom.php' ) ) ) {
$template = $theme_file;
} else {
$template = plugin_dir_path( __FILE__ ) . 'template-custom.php';
}
}
if($template == '') {
throw new \Exception('No template found');
}
return $template;
}
add_filter( 'template_include', 'wpse_288589_load_plugin_template' );
Le hook theme_page_templates
est disponible pour le type de message page
. Si vous souhaitez ajouter un modèle personnalisé à un autre type de publication, vous devez remplacer page
par votre nom de type de publication personnalisé, par exemple. event
post type hook aura un nom theme_event_templates
.