为什么有些钩子不能在类上下文中工作?

时间:2012-05-01 作者:Harley

这件事让我很困惑。我在plugin类中使用add\\u操作来完成某些事情-添加脚本(&U);标题样式、wp\\U ajax等。以下是\\uu构造中的操作:

function __construct(){
    add_action(\'admin_menu\', array($this, \'sph_admin_menu\'));
    add_action(\'sph_header\', array($this, \'sph_callback\'));
    add_action(\'sph_header_items\', array($this, \'sph_default_menu\'), 1);
    add_action(\'sph_header_items\', array($this, \'sph_searchform\'), 2);
    add_action(\'sph_header_items\', array($this, \'sph_social\'), 3);

    //Below here they don\'t work. I have to call these outside of the class (but I need class variables within the functions)
    add_action(\'wp_print_styles\', array(&$this, \'sph_stylesheets\'));
    add_action(\'wp_print_scripts\', array(&$this, \'sph_scripts\'));
    add_action( \'wp_ajax_nopriv_add_to_list\', array(&$this, \'le_add_to_list\'));
    add_action( \'wp_ajax_add_to_list\', array(&$this, \'le_add_to_list\'));
    add_action(\'init\', array(&$this, \'register_menu\'));
}
有人遇到过这样的事情吗?我真的很想知道如何在一个类内使用所说的钩子——在类外进行操作太麻烦了!

2 个回复
SO网友:Michael Ecklund

有时某些钩子需要在特定时间发射。例如,需要对一些挂钩进行激发init.

将此添加到__construct()

add_action(\'init\', array(&$this, \'init\'));
然后添加此函数,该函数将包含需要激发的所有挂钩init.

public function init(){
    add_action(\'hook_name\', array(&$this, \'your_method_name\'));
    add_action(\'hook_name\', array(&$this, \'your_method_name\'));
    add_action(\'hook_name\', array(&$this, \'your_method_name\'));
    add_action(\'hook_name\', array(&$this, \'your_method_name\'));
}
另一个例子:

add_action( \'init\', function () {

    add_action( \'hook_name\', \'function_name\', 10, 3 );
    add_action( \'hook_name\', __NAMESPACE__ . \'\\namespaced_function_name\', 10 );
    add_action( \'hook_name\', \'\\specific\\namespace\\function_name\', 5 );

}, 1 );
你会想了解钩子以及它们何时被触发。所以你知道何时何地触发你的行动。Plugin API/Action Reference

SO网友:Jake

这是一个很老的问题,但如果有人在寻找答案,我也有类似的问题。我上了一节课

class Plugin{
  function __construct(){
    add_action(\'init\', array(&$this, \'init\'));
  }

  function init(){
    // code...
  }
}
插件::init()从未被调用。然后我意识到了我的错误。要实例化我正在执行的类,请执行以下操作:

if(class_exists(\'Plugin\')){
    add_action("init", "plugin_init");
    function socialsports_init() {
      global $plugin;
      $plugin = new Plugin;
    }
}
为了修复它,我只是将实例化代码更改为:

if(class_exists(\'Plugin\')){
    add_action("init", "plugin_init");
    function socialsports_init() {
      global $plugin;
      $plugin = new Plugin;
      $plugin->init();
    }
}
另一种选择是在构造函数中使用不同的挂钩:

function __construct(){
  add_action(\'wp_loaded\', array(&$this, \'init\'));
}
或实例化中的早期挂钩:

add_action("plugins_loaded", "plugin_init");

结束

相关推荐

Update Loop with Form

我有一个照片库,我正在开发使用WP作为内容管理手段。我非常依赖一些jQuery插件来管理UI样式和操作(通过排序)。我的问题是有太多该死的帖子!737,每个都有一个缩略图,显示在页面上。这不可避免地会使任何浏览器陷入困境。尤其是排序插件在对图像进行排序时会“克隆”图像。帖子使用Wp\\u查询脚本构建;<?php $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1; $post_per_page =