Изменение родительской функции файла темы в дочерних темах functions.php

im пытается понять, как работают Action Hooks and Filters и есть этот пример, который я хочу изменить

Эта функция находится в исходном php-файле фреймворка темы:

public function formatArticleCat01( $show_category = false, $shorten_text_chars = 300, $show_date = true, $show_comments = false, $show_author = false, $show_views = false ) { $sFigure = ( $this->article_thumb != '' ) ? '<div class="col-sm-6 col-md-4 col-lg-5">'. $this->getReviewScore() .'' .$this->getFigureSmall() .'</div><div class="col-sm-6 col-md-8 col-lg-7">' : '<div class="col-xs-12">'; return '<div class="row clearfix"> <!-- start:article.default --> <article class="def"> '. $sFigure .' <div class="entry"> '. ( $show_category ? $this->getCategoryLabelSpan() : '' ) .' <h3 itemprop="name"> <a itemprop="url" href="'. get_permalink($this->article_link) .'">'. $this->article_title .'</a> </h3> <div class="entry-meta"> '. ( $show_date ? $this->getPostDateMeta() : '' ) .' '. ( $show_author ? $this->getAuthorMeta() : '' ) .' '. ( $show_comments ? $this->getCommentCountMeta() : '' ).' '. ( $show_views ? $this->getViewsLabelSpan() : '' ) .' </div> <div class="text hidden-xs"> '. MipThemeFramework_Util::ShortenText($this->article_content, $shorten_text_chars) .' </div> '. $this->getStarRatingLabelSpan() .' </div> </div> </article> <!-- end:article.default --> </div>'; } 

Так что скажем, я хочу добавить еще один класс к этому div только в этой строке

 $sFigure = ( $this->article_thumb != '' ) ? '<div class="col-sm-6 col-md-4 col-lg-5">'. $this->getReviewScore() .'' .$this->getFigureSmall() .'</div><div class="col-sm-6 col-md-8 col-lg-7">' : '<div class="col-xs-12">'; 

Он должен работать с крючком фильтра справа? Может ли кто-нибудь помочь мне понять функциональность фильтров-крючков и заставить этот пример работать

Я не знаю, что добавить в мою дочернюю тему functions.php-файл, чтобы предотвратить потерю изменений при обновлении темы.

Надеюсь, кто-нибудь может мне помочь

благодаря

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

Чтобы использовать любой из вышеперечисленных, они должны быть сначала объявлены где-то. Давайте рассмотрим этот пример на странице codex apply_filters :

 // Function that modifies the data function example_callback( $string, $arg1, $arg2 ) { // (maybe) modify $string return $string; } // The filter used by user add_filter( 'example_filter', 'example_callback', 10, 3 ); // Declaration of the filter by the person who $value = apply_filters( 'example_filter', 'filter me', $arg1, $arg2 ); 

Теперь, как вы можете видеть, фильтр объявляется и задается имя с помощью $data = apply_filters( ... ) . Затем в другом месте кода он вызывается с помощью add_filter( ... ) . Итак, если у вас нет фильтра, объявленного прикрепленным к этим данным, вы не можете фильтровать эту часть данных.

Теперь о вашем коде. Похоже, вы схватили этот кусок кода из класса. Большинство достойных разработчиков используют подключаемые функции, когда они пишут свой код. Это означает, что они определяют свои классы и функции следующим образом:

 if ( ! class_exists( 'some_class' ) { class some_class { // Class code here } } 

Это позволяет пользователю переопределять этот конкретный класс или функцию, просто определяя его самостоятельно. Взгляните на свой код. Если это соответствует той же практике, то вы можете скопировать класс в файл functions.php дочерней темы и изменить части, которые вы хотите.

В терминах непрофессионала Фильтры используются для изменения или изменения существующих данных, таких как содержимое сообщения или любое другое определенное значение. Действия в руке делают что-то, когда выполняется конкретная вещь.

Для обоих действий и фильтра вы должны сначала объявить их, т. Е. В случае фильтров вы должны определить, что можно изменить с помощью фильтра, а для действий перехватывает то, что вызовет действие.

Примечание. В приведенном выше примере нет упоминания о каком-либо filter , поэтому единственный способ изменить эту функцию – скопировать его в файл function.php Php дочерней темы и добавить класс вручную.

Теперь, чтобы понять, как работают фильтры, давайте посмотрим на пример,

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

 /* * - 'change_author_name_filter' is the filter hook $tag * - 'Digvijayad' is the value being filtered $author_name = apply_filter('change_author_name_filter', 'Digvijayad'); 

Теперь, если вы используете $author_name тогда он будет использовать 'Digvijayad' качестве имени автора по умолчанию. Однако, если вы добавите фильтр, как показано ниже.

 // filter call_back function change_author_name( $author_name ){ //here you can do whatever you want to author name; // you can modify it or replace it altogether. // To print 'Digvijayad & Jack Johansson' you can do the following. // $author_name .= ' & Jack Johansson'; // or you can replace it altogether. $author_name = 'Jack Johansson'; return $author_name; } add_filter('change_author_name_filter', 'change_author_name', 10, 1); 

Теперь, если вы используете $author_name он будет заменен на 'Jack Johansson'

Что касается Actions, они запускают ответ, когда что-то делается. позволяет воспринимать Тревогу как аналогию. Сначала вы устанавливаете время для будильника, и когда время будет достигнуто, будильник будет воспроизводить звук, чтобы сказать вам, что настало время.

Теперь с действиями вы можете сказать будильнику делать другие вещи, такие как «позвонить другу», когда время будет достигнуто. Теперь давайте поместим это в код.

Предположим, вы уже установили время, теперь вы устанавливаете крюк do_action который будет что-то делать, когда время do_action .

 //code when time is checked // and now time is up do_action('time_is_up'); //basically it will perform this action when ever the time is up 

теперь вы можете добавить дополнительные действия к этому конкретному событию. По аналогии, теперь вы можете сказать, чтобы позвонить другу, когда выполняются действия «time_is_up».

 // Now Whenever 'time_is_up' runs this function will run as well function call_friend(){ //code for calling a friend; echo 'calling friend'; } add_action('time_is_up', 'call_friend', 10); 

Аналогичным образом вы можете добавить другие действия к одному и тому же 'time_is_up' . Например, возможно, вы также хотите позвонить своему члену семьи

 function call_my_family(){ //code to call my family echo 'calling family'; } add_action('time_is_up', 'call_my_family', 10); 

Надеюсь, это простое объяснение очистит ваше замешательство в отношении действий и фильтров.

Для получения дополнительной информации вы можете прочитать статью Тома МакФралина « Действия и фильтры».