2016-08-04 4 views
1

У меня есть публичная функция, которая позволяет привязывать таксономии к пользовательским типам сообщений. Я получаю этот код ошибки в Wordpress, когда для отладки установлено значение true:Wordpress add_action undefined offset 0 в строке plugin.php 925 и 943

Notice: Undefined offset: 0 in C:\xampp\htdocs\yanjep-dev\wp-includes\plugin.php on line 925 
Notice: Undefined offset: 0 in C:\xampp\htdocs\yanjep-dev\wp-includes\plugin.php on line 943 

Это повторяется 9 раз.

Я изолировали проблему с функцией add_action здесь:

add_action('init', 
       call_user_func_array('register_taxonomy', array($taxonomy_name, $post_type_name, $args)) 
      ); 

Вся функция здесь:

public function add_taxonomy($name, $args = array(), $labels = array()) 
{ 
    if(! empty($name)) 
    {   
     // We need to know the post type name, so the new taxonomy can be attached to it. 
     $post_type_name = $this->post_type_name; 

     // Taxonomy properties 
     $taxonomy_name  = strtolower(str_replace(' ', '_', $name)); 
     $taxonomy_labels = $labels; 
     $taxonomy_args  = $args; 

     if(! taxonomy_exists($taxonomy_name)) 
     { 
      //Capitilize the words and make it plural 
      $name  = ucwords(str_replace('_', ' ', $name)); 
      $plural  = $name . 's'; 

      // Default labels, overwrite them with the given labels. 
      $labels = array_merge(

       // Default 
       array(
        'name'     => _x($plural, 'taxonomy general name'), 
        'singular_name'   => _x($name, 'taxonomy singular name'), 
        'search_items'   => __('Search ' . $plural), 
        'all_items'    => __('All ' . $plural), 
        'parent_item'   => __('Parent ' . $name), 
        'parent_item_colon'  => __('Parent ' . $name . ':'), 
        'edit_item'    => __('Edit ' . $name), 
        'update_item'   => __('Update ' . $name), 
        'add_new_item'   => __('Add New ' . $name), 
        'new_item_name'   => __('New ' . $name . ' Name'), 
        'menu_name'    => __($name), 
       ), 

       // Given labels 
       $taxonomy_labels 

      ); 

      // Default arguments, overwitten with the given arguments 
      $args = array_merge(

       // Default 
       array(
        'label'     => $plural, 
        'labels'    => $labels, 
        'public'    => true, 
        'show_ui'    => true, 
        'show_in_nav_menus'  => true, 
        '_builtin'    => false, 
       ), 

       // Given 
       $taxonomy_args 

      ); 

      // Add the taxonomy to the post type 
      add_action('init', 
       call_user_func_array('register_taxonomy', array($taxonomy_name, $post_type_name, $args)) 
      ); 
     } 
     else 
     {    
      add_action('init', array($this, 'add_taxonomy_to_post_type')); 
     } 
    } 
} 

Я работаю на местном уровне с использованием Xampp. Если я прокомментирую действие, уведомления исчезнут. Я знаю, что это связано с количеством аргументов, но я не могу его решить.

Любая помощь приветствуется.

ответ

0

Как вы знаете, add_action требует два аргумента: фильтр (register_taxonomy, и function name позвонить

AFAIK, add_action потребности ссылаться на реальную функцию, и вы не можете передать в call_user_func_array вызова Если след.. код в WP, вы увидите, что add_action, в свою очередь, вызывает add_filter, который, в свою очередь, вызывает _wp_filter_build_unique_id, в котором находится ваша ошибка. Если вы исследуете этот код, вы увидите, что он ожидает строку - как в имя функции для вызова (например, register_my_taxonomy) или массив для методов класса (в соответствии со стандартным способом PHP). Примеры:

add_action('init', 'register_my_taxonomy'); // Call a standard function 
add_action('init', array($this, 'register_my_taxonomy'); // call a public class method 
add_action('init', array(__CLASS__, 'register_my_taxonomy'); // call a public static method 

Таким образом, поскольку в этом случае вы работаете в классе, в вашем add_action('init'...) вызов, я бы рекомендовал его изменения ссылаться на функцию класса:

 add_action('init', 
      array($this, 'register_my_taxonomy') 
     ); 

И в своем классе, создать функцию register_my_taxonomy, который перебирает ваши таксономии и звонит register_taxonomy напрямую.

 Смежные вопросы

  • Нет связанных вопросов^_^