¿Por qué usar add_action para shortcodes?
Me gustaría crear shortcodes
, pero algunos tutoriales mencionan usar add_action
:
add_action( 'init', 'registrar_shortcodes');
Pero leí otro tutorial donde el autor no lo usó, solo colocó esto en functions.php
:
add_shortcode( 'posts-recientes', 'funcion_posts_recientes' );
¿Cuál es el mejor método y por qué usar add_action
?
Si revisas la página del Codex sobre add_shortcode()
, no verás nada sobre la necesidad de usar add_action()
antes de poder utilizar add_shortcode()
.
Por lo tanto, puedes colocar tu add_shortcode()
directamente en tu functions.php
. Esto es lo que yo también hago.
Consulta este artículo - Guía completa de Shortcodes en WordPress sobre el uso de shortcodes y las mejores prácticas.

A veces es necesario utilizar la acción 'init'. Por ejemplo, en este momento estoy editando un tema que se basa en gran medida en widgets y el panel de personalización. Intenté añadir un shortcode personalizado sin acciones y obtuve errores al guardar el contenido en el panel de Personalizar. La acción asegura el orden correcto de ejecución de las funciones. Básicamente dice "¡Oye shortcodes! Primero cargaré las funciones más importantes, ¡luego tú!"

Sin repetir demasiado lo que ya se ha cubierto en las respuestas anteriores; este es simplemente un enfoque de mejores prácticas. A menudo lo uso en el desarrollo de plugins donde necesito tener clases separadas como en la plantilla inicial de plugin wppb.me.
Tiene sentido registrar todos tus hooks de administración en el loader. En el caso del shortcode, puedes agregar el hook add_action para shortcodes en el método de carga de hooks:
/**
* Registrar todos los hooks relacionados con la funcionalidad del área de administración
* del plugin
*/
private function define_admin_hooks() {
$plugin_admin = new instance( $this->get_plugin_name(), $this->get_version() );
$this->loader->add_action( 'init', $plugin_admin, 'register_shortcodes');
}
El principal beneficio que obtengo con este enfoque es la facilidad de mantenimiento del código, ya que el código es modular. Puedes agregar varios otros hooks en el mismo método, lo que facilita el seguimiento y los cambios, especialmente para un plugin grande.
Por lo tanto, significa que en la clase donde quieres usar add_shortcode
no tienes que ejecutar el action hook en el método constructor, ahora puedes usarlo en un método personalizado como:
public function register_shortcodes(){
add_shortcode('recent-posts', array($this, 'recent_posts_function'));
}
