是否可以将CPTUI中的自定义帖子类型安排到一个文件夹中?

时间:2019-03-29 作者:Prateek Pandey

我使用CPTUI为Facet WP创建分类法和类别,我使用它对我创建的页面上的产品进行排序和过滤。这就是我面临的问题:-

enter image description here

正如您所看到的,左侧的自定义post类型已经完全覆盖了左侧的部分(归纳式近似)。有没有办法将这些内容放入某个自定义页面或下拉列表中,以避免弄乱此页面?我必须再创造大约100个这样的东西,我担心这会造成混乱。

谢谢

1 个回复
最合适的回答,由SO网友:rozklad 整理而成

有多种方法可以删除或重新排序这些。我已经创建了几个post类型(Test1、Test2、Test3)来测试以下方法。

enter image description here

CPT UI configuration way

您可以使用添加新的帖子类型Settings > Show in menu 设置为False 并且帖子类型根本不会出现在菜单中。

enter image description here

Plugin way

您可能需要尝试插件,例如Admin Menu Editor (https://wordpress.org/plugins/admin-menu-editor/) 结合前面的设置,这将允许拖放编辑菜单,并添加指向菜单中未显示的帖子类型的链接。

enter image description here

Manual code way

通过将其硬编码到自定义插件或主题函数中,可以获得与上述相同的结果。例如php。手动方式会过滤register_post_type_args

function wp332896_custom_post_type_args( $args, $post_type ) {
    $post_types_to_not_show_in_menu = [\'test1\', \'test2\', \'test3\'];
    if ( in_array($post_type, $post_types_to_not_show_in_menu) ) {
        $args[\'show_in_menu\'] = false;
    }

    return $args;
}
add_filter( \'register_post_type_args\', \'wp332896_custom_post_type_args\', 20, 2 );
请注意,这与使用CPT UI配置将“显示在菜单中”值更改为false基本相同,只是写入代码。变量$post_types_to_not_show_in_menu 保存不在菜单中显示的帖子类型数组。

Dynamic code way

如果您想对注册到CPT UI的所有帖子类型执行此操作,我们可以使用CPT UI的函数cptui_get_post_type_data().

function wp332896_custom_post_type_args( $args, $post_type ) {

    $post_types_to_not_show_in_menu = [];

    if (function_exists(\'cptui_get_post_type_data\')) {
        $post_types_to_not_show_in_menu = array_column(cptui_get_post_type_data(), \'name\');
    }

    if ( in_array($post_type, $post_types_to_not_show_in_menu) ) {
        $args[\'show_in_menu\'] = false;
    }

    return $args;
}
add_filter( \'register_post_type_args\', \'wp332896_custom_post_type_args\', 20, 2 );
请注意$post_types_to_not_show_in_menu 现在,使用该函数获取在CPT UI中注册的所有post类型的名称。

要完成它,您可以添加带有这些帖子类型的“文件夹”作为子菜单。我将使用字符串“cptfolder”连接文件夹和子菜单页面,但您可以使用任何一个。

function wp332896_folder_menu() {

    $menu_slug = \'cptfolder\';

    add_menu_page(\'Folder\', \'Folder\', \'manage_options\', $menu_slug);

    $cpt_post_types = [];

    if (function_exists(\'cptui_get_post_type_data\')) {
        $cpt_post_types = cptui_get_post_type_data();
    }

    foreach($cpt_post_types as $post_type) {
        add_submenu_page($menu_slug, $post_type[\'label\'], $post_type[\'label\'], \'manage_options\', \'edit.php?post_type=\'.$post_type[\'name\']);
    }
 }

add_action(\'admin_menu\', \'wp332896_folder_menu\');

enter image description here

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。