如何在特征中重写主题的公共静态函数?

时间:2020-01-15 作者:stckvrw

我使用一个具有公共静态功能的主题来显示页面的一部分,如:

trait SomeTrait {
    public static function some_function() {
    ?>
        <div class="some_class">Some content</div>
    <?
    }
}
助手文件如下所示:

class Helper {
    use SomeTrait;
    // ...
}
我需要重写插件中的函数。

在插件中,我尝试了以下代码:

/*
Plugin Name: MyPlugin
Description: -
Version: 1.0
Author: -
*/

if ( ! defined( \'ABSPATH\' ) ) exit;

class Extra extends Helper {
    trait SomeTrait{
        function some_function() {
            ?>
            <div>Test</div>
            <?php
        }
    }
}
但我收到致命错误:在中找不到类“Helper”

<小时>

UPDATE

如果我尝试:

function my_function() {
    class Extra extends Helper {
        public static function some_function() {
            ?>
            <div>Test</div>
            <?php
        }
    }
}

add_action( \'init\', \'my_function\' ); // with the \'after_theme_setup\' the result is the same
我没有收到任何错误,但我的函数不会覆盖现有的错误

1 个回复
SO网友:Tom

我相信插件是在主题之前加载的(参见这里"plugins_loaded" vs "setup_theme") 因此,发生错误是因为尚未加载助手。

可以尝试的一件事是创建一个子主题并在那里添加类重写(通过functions.php)。

您还可以在加载主题后通过挂接到“after\\u theme\\u setup”或“init”来提供覆盖。此处有更多详细信息:How to override a theme function (within a class) using a plugin