2016-03-18 8 views
0

В моем основном плагине у меня есть функция, называемая 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, поэтому важно, чтобы я смог ввести этот код в мой плагин.

+0

Вы должны 'add_filter' непосредственно под указанной функции, и если вы хотите, чтобы вызвать функцию вы должны использовать 'apply_filters' – Zy0n

+0

Thing is, мои функции завернуты в класс, поэтому с добавлением add_filter прямо за моей функцией возвращается ошибка - add_filter необходимо обернуть в свою собственную функцию –

ответ

1

Я думаю, что у вас есть опечатка в add_filter вызова, вы не закрыть скобку после add_google_analytics_tab:

function init() { 

... 

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

... 

} 
+0

Хорошо замечен. не может поверить, что весь день его понял! Спасибо друг –