Le script ci-dessous va ajouter un sélecteur de modèle pour vos articles dans la colonne latérale de l’éditeur de vos articles dans WordPress. Je vais utiliser la fonction get_template_part pour afficher le modèle sélectionner et cela va permettre de diviser les différentes boucle de votre thème a fin d’obtenir un code plus clair et d’optimiser l’affichage de votre blog .Vous pourrez ajouter autant de modèle que vous voulez.
Ajouter le code ci-dessous dans le fichier function.php de votre thème :
<?php // template post options
$dynamic_widget_template = array(
/* renommer les noms ci-dessous. le nom donner ici correspondra au nom du fichier ex : content-galerie-photos.php */
"modele-1",
"modele-2",
"modele-3",
"modele-4",
"modele-5",
);
add_action("admin_init", "template_init");
add_action('save_post', 'save_template_link');
function template_init(){
add_meta_box("template_meta", "Sélection modèle article", "template_link", "post", "side", "default");
}
function template_link(){
global $post, $dynamic_widget_template;
$customer = get_post_custom($post->ID);
$linker = $customer["_template"][0];
?>
<div class="link_template_header">
<?php
echo '<select name="linker" class="template-selection">';
echo '<option></option>';
echo '<option>-----------------------</option>';
foreach ( $dynamic_widget_template as $lister ){
if($linker == $lister){
echo '<option value="'.$lister.'" selected="true">'.$lister.'</option>';
}else{
echo '<option value="'.$lister.'">'.$lister.'</option>';
}
}
echo '</select><br />';
?>
</div>
<?php
}
function save_template_link(){
global $post;
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {return $post->ID;}
update_post_meta($post->ID, "_template", $_POST["linker"]);
}
add_action('admin_head', 'template_css');
function template_css() {
echo'
<style type="text/css">
.template-selection{width:100%;}
</style>
';
}
?>
Ici ont va se préoccupé seulement de la première partie du code.
$dynamic_widget_template Va afficher les noms des modèles disponible dans votre thème, le nom du modèles sera la deuxième parti du nom de votre fichier (modèle) qui sera par exemple content-modele-1.php ici ont gardera content préfixe pour les fichiers php. Ont verra plus bas comment l’attribuer. Vous pouvez ajouter des modèles en dupliquant « modele-5 », et en renommant le nom (éviter les majuscules et les accents) .
$dynamic_widget_template = array(
"modele-1",
"modele-2",
"modele-3",
"modele-4",
"modele-5",
);
Un fois que vous avez déterminé le nom de chaque modèle pour votre thème, créer un fichier content-single.php .Ensuite édité le fichier single.php de votre thème copié l’intégralité du code de celui-ci et coller le code dans le fichier content-single.php qui sera le modèle par défaut dans votre thème, après supprimer l’intégralité du code dans le fichier single.php et remplacer le par celui ci-dessous :
<?php
/**
*
* single.php
*/
?>
<?php
global $post;
$customer = get_post_custom($post->ID);
$linker = $customer["_template"][0];
get_template_part( 'content', ''.$linker.'' ); // <-- content-modele.php
// si il y a aucun modèle de sélectionner ont récupère le modèle par défaut
if(empty($linker))
{
get_template_part( 'content', 'single' ); // <-- content-single.php
}
?>
La première partie du code va récupérer le modèle que vous aurez sélectionné lors de l’édition de votre article dans WordPress.
get _template_part( ‘content’, ».$linker. » ); ici content sera le préfixe de vos fichiers modèles.
$linker récupéra le nom de votre modèle que vous aurez sélectionné et qui sera la deuxième parti du nom de votre fichier modèle exemple content-modele-1.php
global $post;
$customer = get_post_custom($post->ID);
$linker = $customer["_template"][0];
get_template_part( 'content', ''.$linker.'' );
La deuxième partie ci-dessous affichera le modèle par défaut si aucun modèle n’est sélectionné qui est dans notre cas content-single.php.
if(empty($linker))
{
get_template_part( 'content', 'single' );
}
Vous pouvez changer le préfixe (content) pour le nom des fichiers modèle.
Si voulez créer plusieurs modèles de page je vous conseil de lire l’article que j’ai rédigé sur le plugin content parts qui vous permet de faire des blocs séparer pour le même article.
Fichiers sources