Obter lista de ações de wordpress disponíveis

2

Eu não acho que exista, mas eu estava imaginando se alguém se deparou com esse problema antes.

Existe uma chamada de função (ou variável) para obter todas as Ações WP registradas e todos os Filtros WP registrados?

Minha maneira atual de fazer isso seria ter algo assim:

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'
);

Só que isso é indesejável porque, e se ... o WP adiciona mais ações, ou deprecia algumas? Eu me sentiria mais seguro ao obter uma solução já na memória.

A lista acima foi traduzida à mão de este link .

EDIT: Estou tentando escrever um sistema de plugins decente usando classes. Aqui está a implementação que estou procurando:

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);
        }
    }
}

Obrigado.

:)

    
por Zack 12.02.2012 / 21:48

3 respostas

4

Gostaria apenas de salientar que isto é, de maneira nenhuma, em qualquer lugar PERTO de uma lista completa. De acordo com adambrown.info , existem 595 ações e 970 filtros no wordpress 3.3 ... e isso é apenas por padrão , não incluindo ganchos adicionados pelos seus plugins.

Você pode fazer algo com global $wp_actions ou global $wp_filters , dependendo do que está tentando fazer, mas eles são gerados dinamicamente e contêm apenas as ações executadas para a página que foi carregada (como melhor eu posso dizer).

Resposta curta: provavelmente não.

    
por mor7ifer 12.02.2012 / 22:38
3

Não há como obter essa lista em um só lugar, porque essencialmente os ganchos não existem até:

  1. O gancho é executado.
  2. Algo é adicionado ao gancho.

Note que o primeiro não requer o último, assim como o segundo não garante que o primeiro irá ocorrer.

Embora seja possível examinar a origem de todos os nomes de hooks estáticos, existem alguns ganchos dinâmicos como:

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

que não são significativos até o momento em que são executados para valores específicos de variáveis.

Você terá que fornecer exemplos mais específicos do que você precisa para obter melhores ideias sobre como obter o que é possível para suas necessidades.

    
por Rarst 12.02.2012 / 22:52
2

você pode usar o global vars $wp_actions ou $wp_filters ou usar o filtro all ; uma alternativa melhor você usa uma solução existente; Um exemplo é o plugin Debug Objecs ; liste todos os Filter adn Action Hooks e ajude-o a encontrar os ganchos certos. Também é possível usar a função do Mike , mas o plugin tem a mesma solução opcional dentro.

    
por bueltge 12.02.2012 / 23:01