web-dev-qa-db-fra.com

add_filter to fonction du thème parent du thème parent du thème enfant

Je souhaite modifier les balises de titre du thème enfant, mais je ne vois pas comment ajouter un filtre à la fonction de thème parent.

Fonction de thème parent que je veux changer:

if(! class_exists('WpkPageHelper')) {
class WpkPageHelper
{
    public static function zn_get_subheader( $args = array(), $is_pb_element = false )
    {
        $config = zn_get_pb_template_config();
        self::render_sub_header( $args );
    }

    public static function render_sub_header( $args = array() )
    {
        $defaults = array(
            'title_tag' => 'h2'
        );
    }   
}
}

Je veux que la valeur title_tag par défaut soit 'span'.

1
Çağrı Çolak

Il n'y a pas de filtre. Pour filtrer une valeur, le développeur doit créer un filtre en encapsulant la valeur filtrable dans un appel à apply_filters() avec un nom pour ce filtre. Ils n'ont pas fait ça.

Ce qu’ilsontont fait, c’est la classe WpkPageHelperpluggable. Cela signifie qu'il est possible qu'un thème enfant remplace la classe entière.

Avant de définir la classe WpkPageHelper, le thème parent vérifie if(! class_exists('WpkPageHelper')) {. Ceci vérifie si la classe a déjà été définie et ne définit la classe que si elle ne l’a pas été. Étant donné que les thèmes enfants sont chargés avant les thèmes parents, cela vous donne la possibilité de définir WpkPageHelper avant le thème parent. Le thème parent utilisera alors votre version.

Il vous suffit donc de copier le code de la classe WpkPageHelper dans le fichier functions.php de votre thème enfant (ou un autre fichier inclus dans le fichier de fonctions de votre thème enfant) et d'apporter les modifications souhaitées. Laissez simplement le contrôle class_exists():

class WpkPageHelper
{
    public static function zn_get_subheader( $args = array(), $is_pb_element = false )
    {
        $config = zn_get_pb_template_config();
        self::render_sub_header( $args );
    }

    public static function render_sub_header( $args = array() )
    {
        $defaults = array(
            'title_tag' => 'span'
        );
    }   
}

C'est ce que font WordPress et certains thèmes et plugins lorsqu'ils encapsulent les définitions de classe et de fonction dans des instructions conditionnelles. Vous verrez parfois des conditions telles que if ( ! function_exists( 'function_name' ) ) {. Il s’agit de WordPress ou du thème/plugin, offrant aux développeurs la possibilité de définir leurs propres versions de ces fonctions ou classes pour WordPress ou le thème/plugin à utiliser à la place de la leur.

0
Jacob Peattie