通过另一个插件删除现有插件类中的操作

时间:2015-07-23 14:28:57

标签: plugins woothemes

我正在尝试删除现有WooThemes Sensei Class中的动作

global $woothemes_sensei; remove_action( 'sensei_single_course_modules_before', array( $woothemes_sensei->modules, 'course_modules_title' ),20 ); remove_action( 'sensei_single_course_modules_content', array( $woothemes_sensei->modules, 'course_module_content' ),30 );

我不确定我做错了什么?我想我用全局变量调用了正确的类。标签是否正确?我已尝试过各种优先事项。

谢谢!

1 个答案:

答案 0 :(得分:1)

  1. 在执行相关操作之前,必须将remove函数包装在函数中并将其附加到挂钩。
  2. $this此处没有上下文。它只有一个类中的上下文
  3. remove_action必须与您要删除的add_action具有完全相同的优先级
  4. course-modules.php模板确切地说明了如何添加course_modules_title操作
  5. /**
     * Hook runs inside single-course/course-modules.php
     *
     * It runs before the modules are shown. This hook fires on the single course page,but only if the course has modules.
     *
     * @since 1.8.0
     *
     * @hooked Sensei()->modules->course_modules_title - 20
     */
    do_action('sensei_single_course_modules_before');
    

    Sensei似乎没有使用全局,模块类是通过模板中暗示的Sensei()->modules访问的。因此,以下内容应删除您的操作:

    function so_31590319_remove_sensei_actions(){
        remove_action('sensei_single_course_modules_before',array( Sensei()->modules,'course_modules_title' ), 20);
        remove_action('sensei_single_course_modules_content', array( Sensei()->modules,'course_module_content' ), 20);
    }
    add_action( 'sensei_single_course_modules_before', 'so_31590319_remove_sensei_actions', 10 );