В чем разница между прямым вызовом функции и вызовом функции с помощью add_action?

В чем разница между следующими двумя кодами? (Прямо вызовите функцию и вызовите функцию, используя add_action)

function pp_submit__link_form(){ if(isset( $_POST['action']) && $_POST['action']="submit_link" ){ echo "Hello"; } } add_action( 'init', 'pp_submit__link_form' ); 

 function pp_submit__link_form(){ if(isset( $_POST['pp_action']) && $_POST['pp_action']="submit_link" ){ echo "Hello"; } } pp_submit__link_form(); 

Solutions Collecting From Web of "В чем разница между прямым вызовом функции и вызовом функции с помощью add_action?"

В первом блоке кода pp_submit__link_form() будет запущен в действии init в WordPress.

Во втором блоке кода pp_submit__link_form() будет запущен сразу же при вызове функции.

В первом примере вы регистрируете функцию 'pp_submit__link_form' в действии hook 'init'. Таким образом, это означает, что когда WordPress запускает действие «init» (вызывая do_action ('init'), он будет включать ваш вызов функции.

См. Код WordPress на крючках, действиях и фильтрах.

Во втором примере вы просто вызываете эту функцию при общем выполнении вашего php-скрипта. Таким образом, он будет срабатывать каждый раз, когда будет загружен ваш плагин.

Из вашего примера видно, что вы хотите что-то сделать с данными $ _POST (возможно, когда кто-то отправляет форму), поэтому первый пример является правильным для использования.

Другой причиной использования add_action (), когда вы хотите вызвать функцию, является ее противоположность, remove_action (), которая позволяет любому плагину / скрипту не вызывать функцию, когда действие выполняется.

add_action / add_filter, remove_action / remove_filter являются лучшими для разработчиков, чтобы максимизировать настройку плагина, темы и поведения ядра.

Таким образом, в любом запущенном процессе вы сможете удалить функцию и сразу после добавления своей собственной функции с помощью add_action (). Например, из вашего кода:

 remove_action('init', 'pp_submit__link_form'); action_action('init', 'my_pp_submit__link_form); function my_pp_submit__link_form(){ if(isset( $_POST['action']) && $_POST['action']="submit_link" ){ echo "Good bye, see you later, I'm tired"; } } 

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

2) используя add_action вы выполняете функцию всякий раз, когда это необходимо. Например, вы хотите проверить зарегистрированного пользователя, тогда вы должны сделать это после запуска «init».

3) add_action – рекомендуемый способ в большинстве случаев

4) с add_action вы делаете функцию также «съемной», если вы выполняете некоторые условия … т.е.:

 if($url = 'mypage.php') { remove_action('wp_footer'); } 

5) с add_action вы делаете свою функцию доступной для чтения плагинами DEBUGER, чтобы проверить время выполнения этой функции, использование ЦП и т. Д. …