В моем основном плагине у меня есть функция, называемая get_pages(). Эта функция содержит массив для каждой страницы администратора для плагина, вот функция:Php wordpress filter не работает
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';
}
первый из которых $ страницы настройки, что крючки в настраиваемом фильтр я сделал следующим образом:
function init() {
...
add_filter('skizzar_admin_theme_tab', array(&$this, 'add_google_analytics_tab', 1, 3));
...
}
Второй функция это обратный вызов, который должен просто вывести «Настройки GA здесь» на вновь созданной странице.
Однако результат в том, что мое меню плагин полностью пропадает и я получаю следующие ошибки в файле 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' непосредственно под указанной функции, и если вы хотите, чтобы вызвать функцию вы должны использовать 'apply_filters' – Zy0n
Thing is, мои функции завернуты в класс, поэтому с добавлением add_filter прямо за моей функцией возвращается ошибка - add_filter необходимо обернуть в свою собственную функцию –