我是使用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' );
但没有任何反应 - 实际上,我的整个插件页面都已丢失。就像我说的,我是新手使用过滤器,任何人都可以帮我理解我出错的地方
答案 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