静态函数未在另一个文件中注册


Static function not registering in another file

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

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"。

要在我的插件中的其他文件中调用该类,我使用:

Skizzar_Admin_Theme_Options::get_skizzar_admin_option( [option-slug] )

例如,我可以使用它来摆脱工具栏中的某个菜单项:

if ( Skizzar_Admin_Theme_Options::get_skizzar_admin_option( 'hide-toolbar-updates' ) ) {
    $wp_toolbar->remove_node( 'updates' );
}

这使用"get_skizzar_admin_option"来检查我们是否应该查看网络保存的选项或单个站点选项。

据我所知,我的方法适用于所有文件,除了一个文件。奇怪的是,在这个文件中,我可以使用:

Skizzar_Admin_Theme_Options::get_saved_option()

Skizzar_Admin_Theme_Options::get_network_saved_option

它工作正常,但是当我使用

Skizzar_Admin_Theme_Options::get_skizzar_admin_option

我收到错误:

get_saved_network_option is not defined

是否有明显的原因我错过了为什么我的函数不会只加载到一个文件中?

请按照以下步骤修改您的get_skizzar_admin_option函数并尝试。

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