Je souhaite ajouter un modèle personnalisé pour un article personnalisé ('post_type' => 'matches'
).
J'écris un plugin. Je garde mon modèle dans le fichier templates/fp-fixture-template.php
.
Voici la fonction:
function fixture_template( $template_path ) {
if ( get_post_type() == 'matches' ) {
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 ( 'fp-fixture-template.php' ) ) ) {
$template_path = $theme_file;
} else {
$template_path = plugin_dir_path( FILE )
. 'templates/fp-fixture-template.php';
}
}
}
return $template_path;
}
Voici le filtre:
add_filter( 'template_include', 'fixture_template');
Code dans le fichier fp-fixture-template.php
:
<?php
/*Template Name: Matches Template
*/
if ( ! defined( 'ABSPATH' ) ) exit; // Don't allow direct access
?>
<div id="primary">
<div id="content" role="main">
<?php
$mypost = array( 'post_type' => 'matches', );
$loop = new WP_Query( $mypost );
?>
<?php while ( $loop->have_posts() ) : $loop->the_post();?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<?php endwhile; ?>
</div>
</div>
Ce plugin cherche page_contact.php
dans le dossier du thème actif et utilise le templates/page_contact.php
du plugin comme solution de secours.
<?php
/**
* Plugin Name: Test Plugin
*/
add_filter( 'template_include', 'contact_page_template', 99 );
function contact_page_template( $template ) {
$file_name = 'page_contact.php';
if ( is_page( 'contact' ) ) {
if ( locate_template( $file_name ) ) {
$template = locate_template( $file_name );
} else {
// Template not found in theme's folder, use plugin's template as a fallback
$template = dirname( __FILE__ ) . '/templates/' . $file_name;
}
}
return $template;
}
Créez la page "Contact" puis templates/page_contact.php
dans votre dossier plugins. Vous devriez maintenant voir le contenu de votre modèle au lieu du modèle normal.