注意:MAP_META_CAP调用不正确

时间:2016-08-05 作者:chris

我创建了一个外部脚本,将json数据导入到使用wp load的自定义post类型中。php。一切正常,但每次更新后我都会收到消息

Notice: map_meta_cap was called incorrectly. The post type EXAMPLE is not registered, so it may not be reliable to check the capability "edit_post" against a post of that type.
Im调用子主题内的脚本,post\\u type\\u exists返回false,但工作正常。。。

我在一个核心跟踪线程中看到了类似的通知,但它谈到了评论是问题所在,我的帖子类型没有任何评论功能。

function child_post_types() {

$labels = array(
    \'name\'                => _x( \'Courses\', \'Post Type General Name\', \'test\' ),
    \'singular_name\'       => _x( \'Course\', \'Post Type Singular Name\', \'test\' ),
    \'menu_name\'           => __( \'Courses\', \'test\' ),
    \'parent_item_colon\'   => __( \'Parent Course:\', \'test\' ),
    \'all_items\'           => __( \'All Courses\', \'test\' ),
    \'view_item\'           => __( \'View Course\', \'test\' ),
    \'add_new_item\'        => __( \'Add New Course\', \'test\' ),
    \'add_new\'             => __( \'Add New\', \'test\' ),
    \'edit_item\'           => __( \'Edit Course\', \'test\' ),
    \'update_item\'         => __( \'Update Course\', \'test\' ),
    \'search_items\'        => __( \'Search Courses\', \'test\' ),
    \'not_found\'           => __( \'Not found\', \'test\' ),
    \'not_found_in_trash\'  => __( \'Not found in Trash\', \'test\' ),
);
$args = array(
    \'label\'               => __( \'Course\', \'test\' ),
    \'description\'         => __( \'Courses\', \'test\' ),
    \'labels\'              => $labels,
    \'supports\'            => array( \'title\', \'thumbnail\', \'editor\', \'revisions\', \'author\' ), //editor, thumbnail, title, author, excerpt, trackpacks, custom-fields, comments, revisions, page-attributes, post-formats 
    \'hierarchical\'        => false,
    \'public\'              => true,
    \'show_ui\'             => true,
    \'show_in_menu\'        => true,
    \'show_in_nav_menus\'   => true,
    \'show_in_admin_bar\'   => true,
    \'menu_position\'       => 5,
    \'can_export\'          => true,
    \'has_archive\'         => true,
    \'exclude_from_search\' => false,
    \'publicly_queryable\'  => true,
    \'rewrite\'             =>array(\'slug\'=>\'courses\'),
    \'capability_type\'     => \'page\',
);
register_post_type( \'course\', $args );

}    
add_action( \'init\', \'child_post_types\', 0 );
脚本位于my child主题中,只是获取一个本地json文件,并通过wp\\u update\\u post()循环浏览课程

require(\'../../../wp-load.php\');

$data = json_decode( file_get_contents( \'wp-content/themes/_theme/courses.json\' ), true );

foreach($data as $key => $c){

  $course = wp_update_post( array(
                \'ID\'    => $courseID, 
                \'post_title\' => $c[\'CourseTitle\'],
                \'post_content\' => $c[\'Description\'],
            ), true );
}
有什么想法吗?

4 个回复
SO网友:Bjorn

今天,我在添加自定义帖子类型时得到了完全相同的行为。我还注意到一些管理员帖子搜索工具停止工作。我的debug\\u日志显示了完全相同的通知。

问题原来是<?php 开始标记(顶部文件)是我注册的CPT。

示例

some text here<?php
/**
 * @class My_Cpt_Class
 */
.......
CPT确实正确注册。我可以添加帖子等,但一些默认的帖子操作(也来自其他插件)对所有帖子类型都不起作用。我不知道为什么会发生这种错误。

SO网友:alexg

如果遇到一篇文章类型为您尚未在上注册的文章,则会出现此错误init 事件

我总是打电话register_post_type() 在…上init, 按照docs. 然而,在我的开发构建过程中,我使用wp-cli 停用我的插件,并重新安装插件的新迭代。在插件停用的短暂时刻,会出现此消息,因为WP运行时没有注册post类型。

简而言之,每当WordPress看到帖子类型未正确注册时,就会显示此错误。

SO网友:Vijay Hardaha

造成这种错误的原因有很多。

我面临的一个原因是,当我将数据保存在注释表中时,那些创建这些数据的插件没有被激活,因此调试工具在激活插件后显示出这种错误,错误消失了。

通过调查你的情况,我认为这是首要问题。请尝试默认优先级10,而不是使用优先级0

add_action( \'init\', \'child_post_types\', 10 );

这可能会解决问题。

SO网友:ShelðÔn Alag

这个答案在这篇帖子上可能很旧,但我希望它能帮助其他人:

我遇到了这个问题,我用这个解决了它。

例如:我使用add_action(\'init\', \'register_posttype\');这给了我错误调用的错误map\\u meta\\u cap。所以我改成admin_init 而不是init.