web-dev-qa-db-fra.com

Je voudrais utiliser créer une fonction dans mon plugin personnalisé pour dire WP utiliser un en-tête différent

Je suis bien conscient de l'utilisation de thèmes pour enfants pour cela. Je connais get_header ($ name). Je comprends déjà l'utilisation des balises conditionnelles.

Je veux que mon plugin supprime la fonction:

function get_header( $name = null ) {
do_action( 'get_header', $name );
$templates = array();
if ( isset($name) )
templates[] = "header-{$name}.php";
$templates[] = 'header.php';
// Backward compat code will be removed in a future release
if ('' == locate_template($templates, true))
load_template( ABSPATH . WPINC . '/theme-compat/header.php');
}

et le remplacement de get_header () par:

function get_header( $name = null ) {
do_action( 'get_header', $name );
$templates = array();
if ( isset($name) )
templates[] = "header-{$name}.php";
$templates[] = 'header.php';
// Backward compat code will be removed in a future release
if ('' == locate_template($templates, true))
load_template( MY PLUGIN PATH/header.php');
}

php.net m'a dit d'utiliser runkit_function_remove (), mais le site Web sur lequel je suis en train de travailler indique qu'il s'agit d'une fonction non définie.

Toute aide serait très appréciée.

Leon

2

Je ne sais pas ce que vous voulez faire est faisable (cela me semble impossible mais tout semble impossible tant que personne ne l’a fait). J'ai pensé à une solution de contournement très laide.

add_filter( 'template_include', function( $template ) {
    $temp = get_temp_dir() . basename( $template );
    file_put_contents( $temp, str_replace( 'get_header(', 'get_header2(', file_get_contents( $template ) ) );
    return $temp;
});

function get_header2( $name = null ) {
    do_action( 'get_header', $name );

    $templates = array();
    if ( isset($name) )
        $templates[] = "header-{$name}.php";

    $templates[] = 'header.php';

    // Backward compat code will be removed in a future release
    if ('' == locate_template($templates, true))
        load_template( MY PLUGIN PATH/header.php');
}

Ceci remplace get_header par get_header2 dans tous les modèles avant le chargement.

1
user27457