wordpress add_action undefined offset 0 in plugin.php第925行和第943行

时间:2016-08-04 19:36:03

标签: wordpress function action offset

我有一个公共函数可以将分类法附加到自定义帖子类型。当调试设置为true时,我在Wordpress中收到此错误代码:

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工作。如果我发表评论,通知就会消失。我知道它与参数的数量有关,但我无法解决它。

感谢任何帮助。

1 个答案:

答案 0 :(得分: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,这是您抛出错误的地方。如果您调查该代码,您将看到它期望一个字符串 - 如在函数名中调用(例如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 ),或者是一个类方法的数组(遵循PHP标准方式)。例子:

add_action('init'...)

所以,既然看起来你在班级工作,在你的 add_action( 'init', array($this, 'register_my_taxonomy') ); 电话中,我建议你更改它以引用一个班级功能:

register_my_taxonomy

在您的课程中,创建功能register_taxonomy 循环您的分类法并直接调用{{1}}。