Пользовательский Action Hook плагина не работает
Я пытаюсь создать простой плагин, в котором хочу создать свой собственный action hook. Вот код для этого.
<?php
/*
Plugin Name: Demo Plugin
Version: 1.0
*/
do_action('basic_action_demo');
?>
Теперь после активации этого плагина я хочу использовать этот action hook в файле function.php моей текущей темы, код для этого выглядит следующим образом:
add_action('basic_action_demo','action_demo');
function action_demo()
{
echo "Я внутри";
}
Проблема в том, что мой подключенный action никогда не вызывается. Мы видим, что do_action вызывается безусловно, поэтому он должен вызываться при каждой загрузке страницы, но он никогда не попадает в метод "action_demo".
То, что я выяснил: плагин загружается до того, как выполняется файл function.php моей темы. Поэтому здесь do_action вызывается первым, а затем add_action.
Буду признателен за подсказку.
Обновление:
Ниже приведен рабочий вариант плагина.
<?php
/*
Plugin Name: Demo Plugin
Version: 1.0
*/
add_action('basic_action_demo','action_demo');
do_action('basic_action_demo');
function action_demo()
{
echo "Я внутри";
die;
}
?>
Вашему плагину нужно дождаться загрузки файла functions.php
темы. Попробуйте так:
<?php
/*
Plugin Name: Демо-плагин
Version: 1.0
*/
add_action( 'after_setup_theme', function() {
do_action( 'basic_action_demo' );
} );
?>
Хук after_setup_theme
выполняется сразу после загрузки functions.php
.
Обновление для вашего комментария ниже. В вашем плагине создайте функцию для вашей формы:
<?php
/*
Plugin Name: Демо-плагин
Version: 1.0
*/
function output_my_form () {
echo "Я форма";
// выполняем ваше действие здесь
do_action( 'basic_action_demo' );
}
?>
Затем в functions.php
вашей темы:
if ( function_exists( 'output_my_form' ) ) {
output_my_form();
}
Это простой пример. В реальности вы бы хотели вызывать эту функцию из файла form.php
в вашей теме.

Это работает, но является ли это единственным способом добавить собственный хука действия в файлах плагина, или я что-то упускаю?

@Avinash Когда вы хотите, чтобы ваш код выполнялся? Плагин создан для того, чтобы быть доступным для темы, поэтому они загружаются первыми. Если вы хотите запускать код из вашего плагина в теме, просто создайте набор функций в плагине и вызывайте их из темы. Если вы хотите запускать код темы из плагина (что не очень хорошая идея), то используйте вышеуказанный хук действия, чтобы дождаться загрузки темы, а затем вызывайте эти функции из обработчика действия.

У меня есть код обработки формы в файле плагина, после которого я вызываю do_action('my_action'), но это не работает :(

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