我刚刚建立了一个测试环境来测试我的新Wordpress网站。我没有迁移数据库;我再次进行了自己的安装,并将我的主题(这是一个简单的主题)移植到我的新实例。除了我正在使用的一种自定义帖子类型外,其他一切都很好。
以下是来自的相关代码functions.php
:
function createCommunityPostType() {
$args = array(
\'public\' => true,
\'label\' => \'Community\',
\'capability_type\' => \'community\',
\'capabilities\' => array(
\'edit_post\' => \'edit_community\',
\'edit_private_posts\' => \'edit_private_communities\',
\'edit_published_posts\' => \'edit_published_communities\',
\'edit_posts\' => \'edit_communities\',
\'edit_others_posts\' => \'edit_others_communities\',
\'delete_post\' => \'delete_community\',
\'delete_posts\' => \'delete_communities\',
\'delete_others_posts\' => \'delete_others_communities\',
\'delete_private_posts\' => \'delete_private_communities\',
\'delete_published_posts\' => \'delete_published_communities\',
\'read_private_posts\' => \'read_private_communities\',
\'read_post\' => \'read_community\',
\'publish_posts\' => \'publish_communities\'
),
\'map_meta_cap\' => true,
\'has_archive\' => true
);
register_post_type(\'community\', $args );
}
add_action(\'init\', \'createCommunityPostType\');
我的自定义帖子类型没有显示在菜单中,我可以看到这些功能不存在(我正在使用members插件使其更加可见)。
我知道代码正在执行,因为我添加了一些print
调用之前和之后的语句register_post_type
. 打印语句是HTML响应的一部分。
我不明白为什么这种帖子不起作用。我有其他方法functions.php
处理样式表、脚本、菜单和侧栏的一些替代等。这些都很好用。
Edit:
我改为使用默认功能,但菜单选项仍然没有出现:
function createCommunityPostType() {
$args = array(
\'public\' => true,
\'label\' => \'Community\',
\'capability_type\' => \'community\',
\'capabilities\' => array(
\'edit_post\' => \'edit_posts\',
\'edit_private_posts\' => \'edit_posts\',
\'edit_published_posts\' => \'edit_posts\',
\'edit_posts\' => \'edit_posts\',
\'edit_others_posts\' => \'edit_posts\',
\'delete_post\' => \'delete_posts\',
\'delete_posts\' => \'delete_posts\',
\'delete_others_posts\' => \'delete_posts\',
\'delete_private_posts\' => \'delete_posts\',
\'delete_published_posts\' => \'delete_posts\',
\'read_private_posts\' => \'read\',
\'read_post\' => \'read\',
\'publish_posts\' => \'publish_posts\'
),
\'map_meta_cap\' => true,
\'has_archive\' => true
);
register_post_type(\'community\', $args );
}
add_action(\'init\', \'createCommunityPostType\');
然而,我切换到使用Wordpress中一些非常基本的示例代码,出现了自定义帖子类型(CPT):
function codex_custom_init() {
$args = array( \'public\' => true, \'label\' => \'Books\' );
register_post_type( \'book\', $args );
}
add_action( \'init\', \'codex_custom_init\' );
最合适的回答,由SO网友:Chip Bennett 整理而成
一个问题是\'capability_type\'
参数\'community\'
与您的\'capabilities\'
数组值。
From the Codex:
capability\\u类型
(字符串或数组)(可选)用于构建读取、编辑和删除功能的字符串。May be passed as an array to allow for alternative plurals when using this argument as a base to construct the capabilities, e.g. array(\'story\', \'stories\'). 默认情况下,capability\\u类型用作构建功能的基础。看来map_meta_cap
需要设置为true,才能使其正常工作。
您的能力类型是:
\'capability_type\' => \'community\'
并注意您的
\'capabilities\'
阵列:
\'capabilities\' => array(
\'edit_post\' => \'edit_community\',
\'edit_private_posts\' => \'edit_private_communities\',
\'edit_published_posts\' => \'edit_published_communities\',
\'edit_posts\' => \'edit_communities\',
\'edit_others_posts\' => \'edit_others_communities\',
\'delete_post\' => \'delete_community\',
\'delete_posts\' => \'delete_communities\',
\'delete_others_posts\' => \'delete_others_communities\',
\'delete_private_posts\' => \'delete_private_communities\',
\'delete_published_posts\' => \'delete_published_communities\',
\'read_private_posts\' => \'read_private_communities\',
\'read_post\' => \'read_community\',
\'publish_posts\' => \'publish_communities\'
),
您的能力类型为
singular, 您构建的能力是
plural.
尝试将功能类型更改为:
\'capability_type\' => array( \'community\', \'communities\' )
此外,如果您定义
\'capability_type\'
, 您不需要明确定义每个功能。所以,试试看
omitting the \'capabilities\'
argument 完全
如果在此之后您的CPT没有出现,则问题可能是由于您的成员插件配置:
确保已正确定义自定义功能确保当前用户具有CPT中引用的功能