Начал изучать написание плагинов для Wordpress.
Кусок кода из урока.
Добавляет в конце поста запись - плагин работает.
Не могу понять откуда берется значение $content. Если я комментирую первую строку, то код все равно отрабатывает.
Я так понимаю, что apply_filters('the_content', $content) берет содержимое поста и дальше функция msp_helloworld_post_footer добавляет в конец содержимого текст. После этого add_filter обновляет пост с новым содержимым.
Однако, почему если убрать первую строку, плагин все равно работает?
$content = apply_filters('the_content', $content);
function msp_helloworld_post_footer($content) {
$content .= "<div class='msp-helloworld-post-footer'><p>Hello, I'm your custom post footer</p></div>";
return $content;
}
add_filter('the_content', 'msp_helloworld_post_footer', 100);
Базовая особенность WordPress - так называемые хуки, или зацепки. Вызов add_filter в вашем примере сообщает WordPress, что надо добавить фильтр на некое его внутреннее событие, называемое the_content. При возникновении этого события Wordpress вызовет вашу функцию, которую вы назвали msp_helloworld_post_footer.
И этот функционал будет работать вне зависимости от того, есть в вашем коде первая строка или нет.
Сама функция add_filter в момент ее вызова ничего не делает. Она лишь записывает в некий внутренний массив хуков WordPress информацию о том, что при наступлении данного события надо вызвать определённую пользовательскую функцию.
Аналогично работают вызовы add_action - они добавляют некое пользовательское действие, которое вызывается в нужный момент. Каждый хук (фильтр или действие) имеет свой список параметров, которые передаются в пользовательскую функцию.
Разберем более подробно, что и когда происходит в вашем примере.
Первая строка - берет некую переменную $content, пропускает ее через фильтр msp_helloworld_post_footer и возвращает результат в ту же переменную $content. При этом с содержимым поста ничего не происходит. Поэтому, есть первая строка в примере, или ее нет - неважно.
add_filter сообщает ядру WordPress, что в нужный момент необходимо вызвать вашу функцию фильтрации контента msp_helloworld_post_footer. На этом выполнение кода в примере заканчивается. Никаких изменений в тело поста не вносится!
Далее, в определенный момент своей работы, ядро WordPress приступает к обработке хука the_content (например, перед выводом контента поста на экран). Ядро просматривает внутренний массив хуков, обнаруживает там, что для хука the_content надо вызвать функцию msp_helloworld_post_footer и делает это, передавая параметром контент поста, который оно собирается выводить на экран. Ваша функция получает контент, обрабатывает его, возвращает в ядро. Ядро выводит измененный контент на экран.
Так, если вкратце, все это и работает.
Во многом именно благодаря наличию механизма хуков WordPress предлагает столь гибкий функционал.
Полный перечень хуков (а их более 2000) можно посмотреть здесь.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости