web-dev-qa-db-fra.com

Comment appliquer un modèle personnalisé pour les publications par défaut?

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é.

2
Bikram

Personnalisation du modèle 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.

Et si la création d'un thème enfant n'était pas une option?

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:

1. En utilisant un modèle de priorité supérieure à 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.

2. Utiliser un plugin pour remplacer le modèle 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.

2
Fayaz