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

时间:2016-02-29 09:00:05

标签: php wordpress function

我有一个文件注册了一个类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

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

1 个答案:

答案 0 :(得分:0)

请按照以下步骤修改你的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;
}