首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在插件中重新声明主题的功能

在插件中重新声明主题的功能
EN

WordPress Development用户
提问于 2016-10-19 09:48:45
回答 4查看 1.1K关注 0票数 1

我试图弄清楚如何从插件中重新声明主题的功能。问题是,当我试图激活插件时,我得到了一个“致命的错误:无法重新声明”。但是如果我将代码添加到已经激活的插件中--一切都如预期的那样工作。有什么明显的东西我错过了吗?

下面是我使用的代码的一个简化示例:

代码语言:javascript
复制
// In my theme I use function_exists check
if ( ! function_exists( 'my_awesome_function' ) ) {
    function my_awesome_function() {
        return "theme";
    }
}

// Now I want to override 'my_awesome_function' output in a plugin
function my_awesome_function() {
    return "plugin";
}

编辑:

在给定的示例中,如果插件是活动的,则需要my_awesome_function()返回plugin,否则返回theme。所以我需要在主题中保留原来的功能。

基本上,我认为如果这种方法适用于子主题,那么它也应该适用于插件。但很明显我错了。

EN

回答 4

WordPress Development用户

发布于 2016-10-19 10:01:56

只能声明一次函数。

我的建议是,将函数放在插件中,然后在主题中使用过滤器来覆盖。

在插件中:

代码语言:javascript
复制
function my_awesome_function() {
    return apply_filters( 'my_awesome_function', "plugin" );
}

在你的主题中:

代码语言:javascript
复制
add_filter( 'my_awesome_function', function( $value ) {
    return "theme";
} );

现在,对my_awesome_function();的每次调用都将返回“主题”而不是“插件”

票数 1
EN

WordPress Development用户

发布于 2016-10-19 11:02:16

1)如果你写了一个主题,不要使用function_exists,用适当的过滤器代替。

2)当启动插件时,您的问题来自不同的执行顺序。通常插件包含在主题之前,但在这种情况下,插件包含在主题之后。

编写插件代码的正确方法是

代码语言:javascript
复制
if ( ! function_exists( 'my_awesome_function' ) ) {
    function my_awesome_function() {
        return "plugin";
    }
}
票数 1
EN

WordPress Development用户

发布于 2016-10-19 10:02:02

当函数加载时,尚未调用第二个函数。因此,function_exist检查一个尚未注册的函数。当第二个加载时,第一个已被调用,然后存在并创建致命错误。

如果没有function_exists的出色功能位于子主题或插件文件中,我认为最好将function_exists检查转换为第二个。

票数 0
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/243245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档