Разъяснение по фильтрам и крючкам


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

Я проводил исследования, и похоже, что add_filter и apply_filter и do_action и add_action, похоже, это правильный путь. Хотя я все еще не уверен в том, как они работают. Являются ли эти методы тем, что я использую для перезаписи основных методов? Я в замешательстве, потому что add_filter использует слово add, когда я чувствую, что оно больше похоже на replace или overwrite (если я не ошибаюсь)

Я только что прочитал первый ответ на этот (тот, что о тако)

Таким образом, автор использовал три шага при описании того, как использовать add_filter:

Шаг 1: статическое значение переменной $taco

<?php $taco = 'chicken'; ?>

Шаг 2:

    <?php
    $taco = apply_filters( 'get_taco', 'chicken' );
    ?>

Шаг 3:

    <?php
    add_filter( 'get_taco', 'my_special_order' );
    function my_special_order( $content ) {
        return 'shredded beef';
    }
    ?>

Итак, в этом ситуация заключается в том, что apply_filter просто создает динамический метод на лету и заставляет его возвращать строку chicken? Или здесь предполагается, что существует основной метод WordPress под названием get_taco и что использование apply_filter поможет переопределить любую исходную функциональность?

Кроме того, можете ли вы только apply_filter что-то, что вы add_filter отредактировали? Другими словами, не сработало бы apply_filter('get_taco');, если бы я сначала не определил add_filter('get_taco', 'my_special_order'); И function my_special_order ($content) ...?

Помещаю ли я эти фильтры в свой functions.php досье? Простите за бомбардируя вас вопросами, я пришел из Ruby on Rails, так что я совершенно не разбираюсь в WordPress.

Author: DᴀʀᴛʜVᴀᴅᴇʀ, 2013-06-20

2 answers

Я в замешательстве, потому что add_filter использует слово добавить, когда я чувствую, что оно больше похоже на строки заменить или перезаписать (если я не ошибаюсь)

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

Итак, в этой ситуации используется apply_filter просто создаете динамический метод на лету и заставляете его возвращать куриную строку?

apply_filters -- обратите внимание, что "s" - более или менее создает фильтр, но обычно ему передается переменная, а не строка, и эта переменная передается обратному вызову, который затем изменяет ее и возвращает.

Фильтры "слизни", как правило, не являются названиями основных функций или методов WordPress, хотя некоторые функции имеют фильтры с тем же именем. Например, the_content() вызывает фильтр the_content.

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

Кроме того, можете ли вы применить только тот фильтр, который вы добавили?

Нет. Все наоборот. Вы можете только add_filter что-то, что является apply_filterред. Вы можете использовать add_filter('whatever','abc');, но ничего не произойдет, если где-то не будет apply_filter('whatever',....

В значительной степени то же самое относится и к add_action/do_action но действия предназначены для того, чтобы делать что-то, а не возвращаемые значения.

Крючки выполняются в разное время при загрузке страницы и в разных местах функций и методов. Например, save_post выполняется ближе к концу wp_insert_post в то время как pre_get_posts выполняется в верхней части get_posts метод класса WP_Query. Другие выполняются в в середине загрузки страницы, а не в функции или методе вообще. Они выполняются там, где когда-либо возникает необходимость (по определению разработчиков) либо изменить, либо добавить информацию, либо запустите другие функции, перенаправьте страницу и т.д.

Дополнительная информация

Разница между крючками фильтра и действия?

 7
Author: s_ha_dum, 2017-04-13 12:37:55

Я думаю, вы немного ошибаетесь.

Фильтры и действия - это функции, которые вы "назначаете" крючкам. Во многих местах WordPress вызывает функции do_action или apply_filter. Первым параметром этих функций является имя крючка.

Так, например, когда вы видите

do_action('blabla');

Это означает, что будут вызваны все действия, назначенные крюку "blabla".

add_filter и add_action ничего не перезаписывает. Он делает именно то, что говорит - он назначает вашу функцию заданной крюк.

Итак, ваш шаг 2. применяет фильтр get_taco к статическому значению chicken. И под применяемым фильтром я подразумеваю, что он вызывает все функции, назначенные get_taco крюку.

Ваш шаг 3. создает новую функцию my_special_order и назначает ее крюку get_taco. Поэтому всякий раз, когда происходит вызов apply_filter('get_taco'), ваша функция будет вызвана.

Если для данного крючка не назначен фильтр/действие, ничего не будет сделано.

Вы можете прочитать больше по этой теме здесь: http://codex.wordpress.org/Plugin_API

 0
Author: Krzysiek Dróżdż, 2013-06-20 16:32:42