Php wordpress 过滤器不工作

Php wordpress filter not working

在我的主插件中,我有一个名为 get_pages() 的函数。此函数包含插件的每个管理页面的数组,函数如下:

static function get_pages( $page_slug = '' ) {

    $pages = array();
    // Default page properties
    $default_args = array(
        'menu-title' => '',
        'tab-title' => '',
        'parent' => 'admin.php',
        'in-menu' => false,
        'has-tab' => true,
        'tab-side' => false,
        'top-level' => false,
    );

    $pages['sat-options-general'] = array_merge(
        $default_args,
        array(
            'slug' => 'sat-options-general',
            'menu-title' => _x( 'Admin Theme', 'Page title in the menu', 'skizzar_admin_theme' ),
            'tab-title' => _x( 'Admin Theme Options', 'Option tab title', 'skizzar_admin_theme' ),
            'title' => _x( 'Admin Theme Options', 'Option page title', 'skizzar_admin_theme' ),
            'callback' => array( __CLASS__, 'display_general_options_page' ),
            'in-menu' => true,
            'top-level' => true,
        )
    );

    $pages['sat-addons'] = array_merge(
        $default_args,
        array(
            'slug' => 'sat-addons',
            'menu-title' => _x( 'Addons', 'Page title in the menu', 'skizzar_admin_theme' ),
            'tab-title' => _x( 'Addons', 'Option tab title', 'skizzar_admin_theme' ),
            'title' => _x( 'Browse Addons', 'Option page title', 'skizzar_admin_theme' ),
            'callback' => array( __CLASS__, 'display_addons_page' ),
            'in-menu' => true,
        )
    );

    if ( $page_slug ) {
        if ( ! isset( $pages[ $page_slug ] ) ) {
            return null;
        }
        return $pages[ $page_slug ];
    }

    return apply_filters( 'skizzar_admin_theme_tab', $pages, $default_args, $page_slug ); 

}

此函数提供名为 sat-options-generalsat-addons 的页面的信息。

我在函数的底部添加了一个过滤器,这样我就可以通过创建一个附加插件来扩展这个插件。

在我的插件插件中,我有以下功能:

function add_google_analytics_tab( $pages, $default_args, $page_slug ) {

    // Return
    if ( $page_slug ) {
        if ( ! isset( $pages[ $page_slug ] ) ) {
            return null;
        }
        return $pages[ $page_slug ];
    }

    $pages['sat-ga'] = array_merge(
            $default_args,
            array(
                'slug' => 'sat-ga',
                'menu-title' => 'GA',
                'tab-title' => 'GA',
                'title' => 'GA',
                'callback' => 'display_ga_page',
                'in-menu' => true,
            )
        );
        return $pages;
}
function display_ga_page() {
    //$page_info = self::get_pages( 'sat-addons' );
    //include( plugin_dir_path( __FILE__ ) . 'inc/page-addons.php' );
    echo 'GA Settings Go Here';
}

第一个是 $pages 设置,它连接到我制作的自定义过滤器中,如下所示:

function init() {

...

    add_filter( 'skizzar_admin_theme_tab', array(&$this, 'add_google_analytics_tab', 1, 3) );

...

}

第二个函数是回调,它应该只是在新创建的页面上回显 "GA Settings go here"。

然而,结果是我的插件菜单完全消失了,我在 debug.log 文件中收到以下错误:

[18-Mar-2016 15:59:52 UTC] PHP Warning:  call_user_func_array() expects parameter 1 to be a valid callback, array must have exactly two members in /Applications/MAMP/htdocs/skizzar-local/wp-includes/plugin.php on line 235
[18-Mar-2016 15:59:52 UTC] PHP Warning:  Invalid argument supplied for foreach() in /Applications/MAMP/htdocs/skizzar-local/wp-content/plugins/skizzar-admin-theme-master/class-sat-menu.php on line 13

我完全不知道这里发生了什么,真的很想找到一个解决方案 - 我确定我正在尝试做的事情并不难,但是很多主要插件利用 $pages 数组中的信息,因此能够将此代码注入我的插件非常重要。

我认为你在 add_filter 调用中有错字,你没有在 add_google_analytics_tab:

之后关闭括号
function init() {

...

    add_filter( 'skizzar_admin_theme_tab', array(&$this, 'add_google_analytics_tab'), 1, 3 );

...

}