it-roy-ru.com

add_filter к вспомогательной функции родительской темы из дочерней темы

Я хочу изменить теги заголовков дочерней темы, но не могу понять, как добавить фильтр в функцию родительской темы.

Функция родительской темы, которую я хочу изменить:

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'
        );
    }   
}
}

Я хочу, чтобы значение title_tag по умолчанию было 'span'.

1
Çağrı Çolak

Там нет фильтра. Чтобы отфильтровать значение, разработчик должен создать фильтр, поместив фильтруемое значение в вызов apply_filters() с именем для этого фильтра. Они этого не сделали.

Что онисделалисделали, так это сделали класс WpkPageHelperpluggable. Это означает, что дочерняя тема может заменить весь класс.

Перед определением класса WpkPageHelper родительская тема проверяет if(! class_exists('WpkPageHelper')) {. Это проверяет, был ли класс уже определен, и определяет класс, только если он не был определен. Поскольку дочерние темы загружаются до родительских тем, это дает вам возможность определить WpkPageHelper до того, как это сделает родительская тема. Тогда родительская тема будет использовать вашу версию.

Поэтому все, что вам нужно сделать, это скопировать код класса WpkPageHelper в файл functions.php вашей дочерней темы (или другой файл, включенный в файл функций вашей дочерней темы) и внести необходимые изменения. Просто пропустите проверку 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'
        );
    }   
}

Это то, что WordPress и некоторые темы и плагины делают, когда оборачивают определения классов и функций в условные операторы. Вы иногда будете видеть условия, такие как if ( ! function_exists( 'function_name' ) ) {. Это WordPress или тема/плагин, дающая разработчикам возможность определять свои собственные версии этих функций или классов для WordPress или темы/плагина для использования вместо своих собственных.

0
Jacob Peattie