获取可用WordPress操作的列表

时间:2012-02-12 作者:Zack

我认为没有,但我想知道以前是否有人碰到过这个问题。

是否有函数(或变量)调用来获取所有已注册的WP操作和所有已注册的WP筛选器?

我目前的做法是这样:

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\'
);
但这是不可取的,因为如果。。。WP添加了更多操作,还是不推荐了一些?如果有一个已经在内存中的解决方案,我会觉得更安全。

以上列表由专人翻译自this link.

EDIT: 我正在尝试使用类编写一个有点像样的插件系统。以下是我正在寻找的实现:

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

:)

3 个回复
最合适的回答,由SO网友:mor7ifer 整理而成

我只想指出,这绝不是一份完整的清单。根据adambrown.info, wordpress 3.3中有595个操作和970个过滤器。。。这只是默认情况,不包括插件添加的挂钩。

你也许可以用global $wp_actionsglobal $wp_filters, 这取决于您尝试执行的操作,但这些操作是动态生成的,并且只包含为加载的页面执行的操作(据我所知)。

简短回答:可能不会。

SO网友:Rarst

无法从一个地方获得这样的列表,因为钩子基本上不存在,除非:

执行挂钩

虽然可能会扫描源代码以查找所有静态挂钩名称,但有很多动态挂钩,如:

do_action("{$old_status}_to_{$new_status}", $post);
直到为变量的特定值执行它们时,它们才有意义。

你必须提供更具体的例子来说明你的需求,以便更好地了解如何满足你的需求。

SO网友:bueltge

您可以使用全局变量$wp_actions$wp_filters 或使用过滤器all; 更好的选择是使用现有解决方案;插件就是一个例子Debug Objecs; 列出所有筛选器和操作挂钩,并帮助您找到正确的挂钩。也可以使用function from Mike, 但是插件内部有相同的可选解决方案。

结束

相关推荐