Obtener una lista de las acciones de wordpress disponibles

2

No creo que haya, pero me preguntaba si alguien se había encontrado con este problema antes.

¿Existe una llamada a la función (o variable) para obtener todas las Acciones WP registradas y todos los Filtros WP registrados?

Mi forma actual de hacerlo sería tener algo como esto:

static private $wp_actions = array(
    'muplugins_loaded',
    'registered_taxonomy',
    'registered_post_type',
    'plugins_loaded',
    'setup_theme',
    'load_textdomain',
    'after_theme_setup',
    'init',
    'widgets_init',
    'register_sidebar',
    'wp_register_sidebar_widget',
    'wp_default_scripts',
    'wp_default_styles',
    'admin_bar_init',
    'add_admin_bar_menus',
    'wp_loaded',
    'parse_request',
    'send_headers',
    'parse_query',
    'pre_get_posts',
    'wp',
    'template_redirect',
    'get_header',
    'wp_head',
    'wp_enqueue_scripts',
    'wp_print_styles',
    'wp_print_scripts',
    'loop_start',
    'the_post',
    'loop_end',
    'get_sidebar',
    'wp_footer',
    'wp_print_footer_scripts',
    'admin_bar_menu',
    'shutdown'
);

Excepto que no es deseable porque, ¿qué pasa si ... WP agrega más acciones o desaprueba algunas? Me sentiría más seguro al obtener una solución ya en la memoria.

La lista anterior se tradujo a mano desde este enlace .

EDITAR: Estoy tratando de escribir un sistema de complementos un tanto decente usando clases. Aquí está la implementación que estoy buscando:

abstract class AtlantisPlugin {
    static private $atlantis_actions = array( );
    static private $atlantis_filters = array( 'atlantis_plugin_init' );

    // http://codex.wordpress.org/Plugin_API/Action_Reference
    static private $wp_actions = /* see above */;
    static private $wp_filters = array();

    protected $atlantis;
    private $class;

    public function __construct(Atlantis $atlantis) {
        $this->class = strtolower(get_class($this));

        $this->atlantis =& $atlantis;
        $this->atlantis->registerPlugin($this->class, $this);

        $actions = array_intersect(self::$wp_actions, get_class_methods($this->class));
        foreach($actions as $action) {
            add_action($action, array(&$this, $action), 2);
        }

        $filters = array_intersect(self::$wp_filters, get_class_methods($this->class));
        foreach($filters as $filter) {
            add_filter($filter, array(&$this, $filter), 2);
        }
    }
}

Gracias.

:)

    
pregunta Zack 12.02.2012 - 21:48

3 respuestas

4

Me gustaría señalar que eso es, de ninguna manera, en cualquier lugar CERCA de una lista completa. Según adambrown.info , hay 595 acciones y 970 filtros en wordpress 3.3 ... y eso es solo por defecto , sin incluir los ganchos añadidos por tus complementos.

Es posible que puedas hacer algo con global $wp_actions o global $wp_filters , dependiendo de lo que estés tratando de hacer, pero estos se generan dinámicamente y solo contienen las acciones realizadas para la página que se cargó (lo mejor que pueda se puede decir).

Respuesta corta: probablemente no.

    
respondido por el mor7ifer 12.02.2012 - 22:38
3

No hay forma de obtener dicha lista desde un solo lugar, porque los enganches esencialmente no existen hasta que:

  1. se ejecuta el gancho.
  2. Se agrega algo al gancho.

Tenga en cuenta que el primero no requiere este último, al igual que este último no garantiza que ocurrirá el anterior.

Si bien es probable que se escanee la fuente para todos los nombres de ganchos estáticos, hay bastantes ganchos dinámicos como:

do_action("{$old_status}_to_{$new_status}", $post);

que no son significativos hasta el momento en que se ejecutan para valores específicos de variables.

Deberá proporcionar un ejemplo más específico de lo que necesita para obtener mejores ideas sobre cómo obtener lo que es posible para sus necesidades.

    
respondido por el Rarst 12.02.2012 - 22:52
2

puede usar los vars globales $wp_actions o $wp_filters o ir sobre el Filtro all ; Una mejor alternativa es usar una solución existente; un ejemplo es el complemento Debug Objecs ; Enumere todos los ganchos de acción y filtro y ayúdele a encontrar los ganchos correctos. También es posible utilizar la función de Mike , pero el complemento tiene la misma solución opcional dentro.

    
respondido por el bueltge 12.02.2012 - 23:01

Lea otras preguntas en las etiquetas