来自插件的自定义帖子类型链接

时间:2013-03-02 作者:elke_wtf

我目前正在开发一个插件,可以创建自定义的帖子类型。我目前遇到的问题是,自定义帖子类型创建得很好,但当我添加新帖子时,会收到一个“无效帖子类型”错误。

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菜单必须在插件菜单下。

谢谢

3 个回复
最合适的回答,由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. 我想解释一下NULLFALSE 值是,当您注册自定义帖子类型或自定义分类时: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.

SO网友:bueltge

开发者助手插件Debug Objects列出自定义帖子类型的参数,易于使用。但是对于这个输出部分,使用github上的当前开发版本,她有更多的特性。

自定义post类型的参数输出示例。enter image description here

结束

相关推荐