首页 > 解决方案 > 在 Wordpress 的类中使用 $this 进行操作挂钩

问题描述

我正在尝试在插件Sensei LMS 媒体附件中的类 Sensei_Media_Attachments 中创建一个基于 'display_attached_media' 的钩子,以便在我的 functions.php 中使用的自定义位置激活它:

add_action( 'custom_action', array( $this, 'display_attached_media' ), 35 );

但我收到以下错误:

致命错误:未捕获的错误:不在对象上下文中使用 $this

插件示例:

class Sensei_Media_Attachments {

    private static $instance = null;
    private $assets_dir;
    private $assets_url;
    private $token;

public function frontend_hooks() {
    // Media files display.
    add_action( 'sensei_single_lesson_content_inside_after', array( $this, 'display_attached_media' ), 35 );
    add_action( 'sensei_single_course_content_inside_before', array( $this, 'display_attached_media' ), 35 );
} }

在课堂上使用时,它运行良好,但我不想编辑插件文件。


更新

当我按照@disinfor 的建议在第 226 行Uncaught Error: Using $this when not in object contextfunctions.php更改为class-sensei-media-attachments.php.php时,我进行了一些研究并发现了问题。在函数 display_attached_media 内部,我有一个基于 的调用$this,因此我将其替换为self::并且一切正常。

但是,有谁知道我们是否有另一个来修复它,而不是更改插件代码?

标签: wordpress

解决方案


您不能在课堂外使用 $this。请将动作称为

add_action( 'custom_action', 'display_attached_media', 35 );

在你主题的functions.php中


推荐阅读