首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态函数未在其他文件中注册

静态函数未在其他文件中注册
EN

Stack Overflow用户
提问于 2016-02-29 17:00:05
回答 1查看 27关注 0票数 1

我有一个注册类Skizzar_Admin_Theme_Options的文件,该类中有以下3个函数(以及其他函数):

代码语言:javascript
复制
static function get_saved_option( $option_slug = '', $user_role = '', $include_user_meta = true, $network = false ) {

    $option_info = self::get_option_info( $option_slug );

    // Incompatible arguments
    if ( ! $option_slug || is_null( $option_info ) ) {
        return null;
    }

    // Prepare saved options
    $options = self::get_saved_options( $include_user_meta, $network );

    // Return role-based value
    if ( $option_info['role-based'] ) {

        // Get user role
        if ( ! $user_role ) {
            $user_role = Skizzar_Admin_Theme_User::get_user_role();
            $user_role = is_null( $user_role ) ? '' : $user_role;
        }

        // Return role-based value if it exists, or the default for new roles
        return isset( $options[ $option_slug ][ $user_role ] ) ? $options[ $option_slug ][ $user_role ] : $options[ $option_slug ]['sat-default'];

    }

    // Return
    return $options[ $option_slug ];

}

// Shortcut to get a network option
static function get_saved_network_option( $option_slug = '' ) {
    return self::get_saved_option( $option_slug, '', true, true );
}

// Return global values if single site dettings are disabled 
static function get_skizzar_admin_option() {
    $is_network_only = ( is_multisite() && Skizzar_Admin_Theme_Options::get_saved_network_option( 'enable-global-settings' ) ) ? 'get_saved_network_option' : 'get_saved_option';
    return $is_network_only;
}

它们是,get_saved_option(),它返回从单个wordpress站点保存的插件选项,get_network_saved_option(),如果是多站点安装,它从网络管理员返回插件选项。还有get_skizzar_admin_option(),它检查站点是否为多站点,并且用户已选择使用全局设置而不是单个站点设置,然后根据结果返回'get_saved_option‘或'get_network_saved_option’。

为了在我的插件中调用其他文件中的类,我使用:

代码语言:javascript
复制
Skizzar_Admin_Theme_Options::get_skizzar_admin_option( [option-slug] )

例如,我可以用它去掉工具栏中的某个菜单项:

代码语言:javascript
复制
if ( Skizzar_Admin_Theme_Options::get_skizzar_admin_option( 'hide-toolbar-updates' ) ) {
    $wp_toolbar->remove_node( 'updates' );
}

这使用'get_skizzar_admin_option‘来检查我们是否应该查看网络保存的选项,还是单站点选项。

从我看到的情况来看,我的方法在所有文件中都有效,只有一个文件除外。奇怪的是,在这个文件中,我可以使用:

代码语言:javascript
复制
Skizzar_Admin_Theme_Options::get_saved_option()

代码语言:javascript
复制
Skizzar_Admin_Theme_Options::get_network_saved_option

它工作得很好,但是当我使用

代码语言:javascript
复制
Skizzar_Admin_Theme_Options::get_skizzar_admin_option

我得到了错误:

代码语言:javascript
复制
get_saved_network_option is not defined

为什么我的函数不能只在一个文件中加载,有什么明显的原因吗?

EN

回答 1

Stack Overflow用户

发布于 2016-02-29 17:39:06

请按如下所示修改您的get_skizzar_admin_option函数并尝试。

代码语言:javascript
复制
static function get_skizzar_admin_option() {
    $is_network_only = ( is_multisite() && self::get_saved_network_option( 'enable-global-settings' ) ) ? 'get_saved_network_option' : 'get_saved_option';
    return $is_network_only;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35695411

复制
相关文章

相似问题

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