El Action Hook personalizado del plugin no funciona
Estoy tratando de crear un plugin básico donde quiero crear mi propio action hook. Aquí está el código para el mismo.
<?php
/*
Plugin Name: Demo Plugin
Version: 1.0
*/
do_action('basic_action_demo');
?>
Ahora después de activar este plugin quiero usar este action hook en el archivo functions.php de mi tema actual, el código es el siguiente:
add_action('basic_action_demo','action_demo');
function action_demo()
{
echo "Estoy dentro";
}
El problema es que mi action hook nunca se ejecuta, podemos ver que do_action se llama incondicionalmente por lo que se llamará en cada carga de página pero nunca entra en el método "action_demo".
Lo que he descubierto hasta ahora es que el plugin se carga antes de que se ejecute el archivo functions.php de mi tema. Así que aquí do_action se llama primero y luego add_action.
Una pista sería muy apreciada.
Actualización:
El siguiente código del plugin funciona.
<?php
/*
Plugin Name: Demo Plugin
Version: 1.0
*/
add_action('basic_action_demo','action_demo');
do_action('basic_action_demo');
function action_demo()
{
echo "Estoy dentro";
die;
}
?>
Tu plugin debe esperar a que se cargue el archivo functions.php
del tema. Prueba esto:
<?php
/*
Plugin Name: Demo Plugin
Version: 1.0
*/
add_action( 'after_setup_theme', function() {
do_action( 'basic_action_demo' );
} );
?>
El hook after_setup_theme
se ejecuta inmediatamente después de que se carga functions.php
.
Actualización para tu comentario a continuación. En tu plugin crea una función para tu formulario:
<?php
/*
Plugin Name: Demo Plugin
Version: 1.0
*/
function output_my_form () {
echo "Soy un formulario";
// realiza tu acción aquí
do_action( 'basic_action_demo' );
}
?>
Luego en el functions.php
de tu tema:
if ( function_exists( 'output_my_form' ) ) {
output_my_form();
}
Este es un ejemplo simple. En la realidad querrías llamar a esa función desde un archivo form.php
en tu tema.

Esto funciona, pero ¿es esta la única manera de agregar mi propio hook de acción en los archivos del plugin o me estoy perdiendo algo?

@Avinash ¿Cuándo quieres que se ejecute tu código? Un plugin está hecho para estar disponible para un tema, por eso se cargan primero. Si quieres ejecutar código de tu plugin desde tu tema, simplemente crea un conjunto de funciones en tu plugin y llámalas desde tu tema. Si quieres ejecutar código del tema desde un plugin (no es una buena idea) entonces usa el hook de acción mencionado anteriormente para esperar a que cargue el tema y luego llama a esas funciones desde el manejador de la acción.

Tengo mi código de envío de formulario en mi archivo de plugin, así que después de eso he hecho do_action('my_action') pero no está funcionando :(

OK. Estoy empezando a entender. No generes tu formulario cuando se cargue tu plugin. Crea una función para ello, luego llama a esa función desde tu tema. Actualizaré mi respuesta.
