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-general
和 sat-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 );
...
}
在我的主插件中,我有一个名为 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-general
和 sat-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 );
...
}