Wordpress php使用过滤器添加功能

时间:2016-03-13 16:04:16

标签: php wordpress filter

我是使用wordpress过滤器的新手。我正在编写一个我希望可扩展的插件。我的插件中有以下功能,可以在插件页面上创建标签:

static function get_pages( $page_slug = '' ) {

    $pages = array();
    // Add tabs to network admin page if global settings enabled
    $is_network_only = ( is_multisite()) ? true : false;

    // Default page properties
    $default_args = array(
        'menu-title' => '',
        'tab-title' => '',
        'parent' => 'themes.php',
        'in-menu' => false,
        'has-tab' => true,
        'has-network-tab' => false,
        'tab-side' => false,
        'network' => 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,
            'has-network-tab' => $is_network_only,
            'network' => $is_network_only
        )
    );

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

}

为了使其可扩展,我将return语句更改为以下内容:

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

然后,我创建了另一个插件来测试这个过滤器并添加另一个标签,所以我添加了以下代码:

function add_google_analytics_tab( $pages ) {


$pages['sat-google-analytics'] = array_merge(
        $default_args,
        array(
            'slug' => 'sat-google-analytics',
            'menu-title' => _x( 'Google Analytics', 'Page title in the menu', 'skizzar_admin_theme' ),
            'tab-title' => _x( 'Google Analytics', 'Option tab title', 'skizzar_admin_theme' ),
            'title' => _x( 'Google Analytics', 'Option page title', 'skizzar_admin_theme' ),
            'callback' => array( __CLASS__, 'display_general_options_page' ),
            'in-menu' => true,
            'has-network-tab' => true,
            'network' => true
        )
    );
}
add_filter( 'skizzar_admin_theme_tab', 'add_google_analytics_tab' );

但没有任何反应 - 实际上,我的整个插件页面都已丢失。就像我说的,我是新手使用过滤器,任何人都可以帮我理解我出错的地方

1 个答案:

答案 0 :(得分:1)

这是您正确的代码

// Return
    if ( $page_slug ) {
        if ( ! isset( $pages[ $page_slug ] ) ) {
            return null;
        }
        return $pages[ $page_slug ];
    }
    return apply_filters( 'skizzar_admin_theme_tab', $pages, $default_args ); //values

然后:

function add_google_analytics_tab( $pages, $default_args ) {


$pages['sat-google-analytics'] = array_merge(
        $default_args,
        array(
            'slug' => 'sat-google-analytics',
            'menu-title' => _x( 'Google Analytics', 'Page title in the menu', 'skizzar_admin_theme' ),
            'tab-title' => _x( 'Google Analytics', 'Option tab title', 'skizzar_admin_theme' ),
            'title' => _x( 'Google Analytics', 'Option page title', 'skizzar_admin_theme' ),
            'callback' => array( __CLASS__, 'display_general_options_page' ),
            'in-menu' => true,
            'has-network-tab' => true,
            'network' => true
        )
    );
    return $pages;
}
add_filter( 'skizzar_admin_theme_tab', 'add_google_analytics_tab', 1, 2 ); //1 priority, 2 accepted_args

如果$page_slug包含在内。

static function get_pages( $page_slug = '' ) {

    $pages = array();
    // Add tabs to network admin page if global settings enabled
    $is_network_only = ( is_multisite()) ? true : false;

    // Default page properties
    $default_args = array(
        'menu-title' => '',
        'tab-title' => '',
        'parent' => 'themes.php',
        'in-menu' => false,
        'has-tab' => true,
        'has-network-tab' => false,
        'tab-side' => false,
        'network' => 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,
            'has-network-tab' => $is_network_only,
            'network' => $is_network_only
        )
    );

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

}

然后:

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-google-analytics'] = array_merge(
        $default_args,
        array(
            'slug' => 'sat-google-analytics',
            'menu-title' => _x( 'Google Analytics', 'Page title in the menu', 'skizzar_admin_theme' ),
            'tab-title' => _x( 'Google Analytics', 'Option tab title', 'skizzar_admin_theme' ),
            'title' => _x( 'Google Analytics', 'Option page title', 'skizzar_admin_theme' ),
            'callback' => array( __CLASS__, 'display_general_options_page' ),
            'in-menu' => true,
            'has-network-tab' => true,
            'network' => true
        )
    );
    return $pages;
}
add_filter( 'skizzar_admin_theme_tab', 'add_google_analytics_tab', 1, 3 ); //1 priority, 3 accepted_args