【问题标题】:Remove action in an existing plugin class via another plugin通过另一个插件删除现有插件类中的操作
【发布时间】:2015-07-23 14:28:57
【问题描述】:

我正在尝试删除现有 WooThemes Sensei 类中的操作

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

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

谢谢!

【问题讨论】:

    标签: plugins woothemes


    【解决方案1】:
    1. 在运行相关操作之前,您必须将删除函数包装在一个函数中并将其附加到一个挂钩上。
    2. $this 此处没有上下文。它只有一个类内的上下文
    3. remove_action 必须与您尝试删除的 add_action 具有完全相同的优先级
    4. course-modules.php 模板准确说明了如何添加 course_modules_title 操作
    /**
     * 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 );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多