J'ai créé un modèle personnalisé. Maintenant, comment appliquer mon modèle au lieu de single.php
pour les publications par défaut?
Je souhaite le faire pour que la mise à niveau du thème ne remplace pas le modèle personnalisé.
single.php
à partir d'un thème enfant:Si le thème principal que vous allez mettre à niveau à l'avenir n'est pas un thème enfant, vous pouvez créer votre propre thème enfant et créer un fichier de modèle single.php
dans le thème enfant pour remplacer le single.php
du thème parent. Ainsi, les futures mises à niveau du thème parent ne remplaceront pas vos personnalisations.
Supposons que vous ne souhaitiez pas créer un thème enfant pour des raisons valables ou que votre thème soit un thème enfant et que vous souhaitiez le mettre à niveau ultérieurement. WordPress ne supportant pas le thème Grand Child, vous avez plusieurs options:
single.php
:Selon Hiérarchie des modèles WordPress , vous pouvez utiliser le fichier de modèle single-{post-type}.php
pour remplacer single.php
.
Puisque vous allez utiliser le nouveau modèle par défaut pour les publications, si vous créez un nouveau fichier de modèle et le nommez single-post.php
, toutes les publications seront chargées par défaut avec ce modèle au lieu de single.php
en raison de sa définition dans la hiérarchie des modèles de WordPress coeur.
single.php
pour les publications:Supposons même que single-post.php
soit déjà disponible dans votre thème ou que vous pensiez qu'il pourrait être ajouté lors de futures mises à niveau. Dans ce cas, la seule alternative possible consiste à ajouter un plugin personnalisé pour modifier ce comportement.
Vous pouvez utiliser le crochet de filtre single_template
pour y parvenir. Exemple de plugin CODE:
<?php
/*
Plugin Name: Custom Theme Utility Plugin
Plugin URI: https://wordpress.stackexchange.com/a/307541/110572
Description: Overrides single.php template for posts by default
Version: 1.0.0
Author: Fayaz Ahmed
Author URI: https://www.fayazmiraz.com/
*/
define( 'WPSE_307430_PLUGIN_TEMPLATE_DIR', plugin_dir_path( __FILE__ ) );
function wpse307430_override_single_template( $template_file, $type, $templates ) {
global $post;
if ( $post->post_type == 'post' ) {
$custom_single_template = WPSE_307430_PLUGIN_TEMPLATE_DIR . 'single.php';
$template_length = strlen( $template_file );
// To determine if we want to override single.php from plugin
// Without this check, WordPress template hierarchy will be broken for single posts, we don't want that
$single_override = $template_length === 0 || substr_compare( $template_file, "single.php", strlen( $template_file ) - 10, 10) === 0;
if( $single_override && file_exists( $custom_single_template ) ) {
$template_file = $custom_single_template;
}
}
return $template_file;
}
add_filter( 'single_template', 'wpse307430_override_single_template', 10, 3 );
Créez cet exemple de fichier de plugin dans un répertoire (par exemple: /theme-util/theme-util.php
) sous le répertoire de plugins, activez le plugin et conservez votre fichier de modèle single.php
personnalisé dans ce répertoire de plugin sous le nom /theme-util/single.php
.
Ainsi, tant que ce plugin est actif, le fichier modèle single.php
de ce répertoire remplacera le fichier modèle single.php
à la fois d'un thème parent et d'un thème enfant.