我目前正在开发一个插件,可以创建自定义的帖子类型。我目前遇到的问题是,自定义帖子类型创建得很好,但当我添加新帖子时,会收到一个“无效帖子类型”错误。
ui被隐藏,我正在尝试从add\\u submenu\\u页面链接到它。我需要帮助来正确链接它。
下面是我在子菜单声明中的内容:
add_submenu_page( \'restaurant-orders\', \'Menu Management\', \'Menu Management\', \'manage_options\', \'edit.php?post_type=menu-item\');
我的帖子类型:
function restaurant_menu_items() {
$labels = array(
\'name\' => __(\'Restaurant Menu Items\', \'post type general name\'),
\'singular_name\' => __(\'Restaurant Menu Item\', \'post type singular name\'),
\'add_new\' => __(\'Add New\', \'product page\'),
\'add_new_item\' => __(\'Add New Menu Item\'),
\'edit_item\' => __(\'Edit Menu Item\'),
\'new_item\' => __(\'New Menu Item\'),
\'view_item\' => __(\'View Menu Item\'),
\'search_items\' => __(\'Search Menu Items\'),
\'not_found\' => __(\'Nothing found\'),
\'not_found_in_trash\' => __(\'Nothing found in Trash\'),
\'parent_item_colon\' => \'\'
);
$args = array(
\'labels\' => $labels,
\'public\' => true,
\'publicly_queryable\' => true,
\'show_ui\' => false,
\'query_var\' => true,
\'menu_icon\' => get_stylesheet_directory_uri() . \'/article16.png\',
\'rewrite\' => true,
\'capability_type\' => \'post\',
\'hierarchical\' => false,
\'menu_position\' => null,
\'supports\' => array(\'title\',\'editor\',\'thumbnail\'),
);
register_post_type( \'menu-item\' , $args );
}
如果我显示ui并按常规方式操作,我可以添加新帖子。但是我不想这样,post菜单必须在插件菜单下。
谢谢
最合适的回答,由SO网友:Ünsal Korkmaz 整理而成
神奇之处在于:
\'show_ui\' => true,
\'show_in_menu\' => \'plugins.php\',
尝试以下操作:
function restaurant_menu_items() {
$labels = array(
\'name\' => __(\'Restaurant Menu Items\', \'post type general name\'),
\'singular_name\' => __(\'Restaurant Menu Item\', \'post type singular name\'),
\'add_new\' => __(\'Add New\', \'product page\'),
\'add_new_item\' => __(\'Add New Menu Item\'),
\'edit_item\' => __(\'Edit Menu Item\'),
\'new_item\' => __(\'New Menu Item\'),
\'view_item\' => __(\'View Menu Item\'),
\'search_items\' => __(\'Search Menu Items\'),
\'not_found\' => __(\'Nothing found\'),
\'not_found_in_trash\' => __(\'Nothing found in Trash\'),
\'parent_item_colon\' => \'\'
);
$args = array(
\'labels\' => $labels,
\'public\' => true,
\'publicly_queryable\' => true,
\'show_ui\' => true,
\'show_in_menu\' => \'plugins.php\',
\'query_var\' => true,
\'menu_icon\' => get_stylesheet_directory_uri() . \'/article16.png\',
\'rewrite\' => true,
\'capability_type\' => \'post\',
\'hierarchical\' => false,
\'menu_position\' => null,
\'supports\' => array(\'title\',\'editor\',\'thumbnail\'),
);
register_post_type( \'menu-item\' , $args );
}
SO网友:kaiser
像@ÜnsalKorkmaz 在他的解决方案中已经指出,需要使用show_in_menu
. 我想解释一下NULL
或FALSE
值是,当您注册自定义帖子类型或自定义分类时:defaults 你必须知道。。。或者必须知道如何获得足够的feedback 了解发生了什么。
检查堆芯register_post_type()
内部构件。在下面的示例中(取自该API函数),您将看到发生了什么。
// If not set, default to the setting for public.
if ( null === $args->show_ui )
$args->show_ui = $args->public;
// If not set, default to the setting for show_ui.
if ( null === $args->show_in_menu || ! $args->show_ui )
$args->show_in_menu = $args->show_ui;
阅读核心内部构件后可以得出的结论大多数核心函数都有一个默认值,即使没有指定每个值,也可以正常工作。其中一些参数的优先级比其他参数低。您可以通过
public
只有在以下情况下才具有默认值的参数
show_ui
未定义。
如何收集足够的反馈
大多数核心函数都有一个钩子来截获参数,钩子在实际任务之前运行,还有一个钩子在实际任务之后立即运行。在这种情况下,后面的钩子如下所示:
do_action( \'registered_post_type\', $post_type, $args );
所以你给自己做了一点…
…帮助您进行实时调试的插件现在将输出/转储全套参数,after core已抛出其默认值。根据我自己的经验:这是一个巨大的帮手,因为你可以监控每一个变化,而不会陷入兔子洞,也不会让你的手在核心脏污。享受
<?php
defined( \'ABSPATH\' ) OR exit;
/**
* Plugin Name: (#89066) Debug Register Post Type Args
*/
add_action( \'registered_post_type\', \'wpse89066_debug_cpt_args\', 10, 2 );
function wpse89066_debug_cpt_args( $post_type, $args )
{
printf( \'<h1>%s</h1>\', $post_type );
var_dump( $args );
}
完整插件
您可以获取此插件的完整版本
over here at GitHub as Gist.