Wordpress是否支持无限制或大量自定义帖子类型?
是的,但这将导致一个不切实际的大WP管理区域。此外,请记住,由于项的数量较多,这会使REST API发现速度变慢,并且由于模板的数量较多,会使模板制作更加繁琐。
请记住,因为在每次页面加载时都会注册post类型,并将其存储在内存中,如果您注册了数百个post类型,则意味着WP可以处理的每种可能类型的请求都会变慢。
我想建立一个目录站点,其中的帖子将是帖子类型,目录项将是标准的帖子存档条目。
啊哈,我强烈建议你不要这样做,这是个坏主意,会给你带来复杂的问题。
您最好使用单个CPT,并使用自定义分类法来组织它们。自定义帖子类型不应用于分组,这就是分类法的作用。分类法可以提供目录所需的URL、归档、模板等。
另外,在分类法中列出术语比列出所有注册的帖子类型要容易得多。打个电话就行了get_terms
, 甚至还有一些助手函数可以为您提供术语的格式化列表。术语也可以有子术语,因此可以添加额外的层次结构。帖子也可以有多种分类法中的术语!
<小时>Edit: 我决定做一些实验。看到一个非常糟糕的插件:
<?php
/**
* Plugin Name: 200 post types
* Description: An awful plugin to prove a point
*/
add_action( \'init\', \'tomjn_add_post_types\' );
function tomjn_add_post_types() {
for ($i=0; $i < 200; $i++) {
$labels = array(
\'name\' => _x( \'CPT \'.$i, \'post type general name\', \'your-plugin-textdomain\' ),
\'singular_name\' => _x( \'CPT\'.$i, \'post type singular name\', \'your-plugin-textdomain\' ),
\'menu_name\' => _x( \'CPTs \'.$i, \'admin menu\', \'your-plugin-textdomain\' ),
\'name_admin_bar\' => _x( \'CPT\'.$i, \'add new on admin bar\', \'your-plugin-textdomain\' ),
\'add_new\' => _x( \'Add New\', \'cpt\'.$i, \'your-plugin-textdomain\' ),
\'add_new_item\' => __( \'Add New CPT\'.$i, \'your-plugin-textdomain\' ),
\'new_item\' => __( \'New CPT\'.$i, \'your-plugin-textdomain\' ),
\'edit_item\' => __( \'Edit CPT\'.$i, \'your-plugin-textdomain\' ),
\'view_item\' => __( \'View CPT\'.$i, \'your-plugin-textdomain\' ),
\'all_items\' => __( \'All CPTs\'.$i, \'your-plugin-textdomain\' ),
\'search_items\' => __( \'Search CPTs\'.$i, \'your-plugin-textdomain\' ),
\'parent_item_colon\' => __( \'Parent CPTs:\'.$i, \'your-plugin-textdomain\' ),
\'not_found\' => __( \'No CPTs found.\', \'your-plugin-textdomain\' ),
\'not_found_in_trash\' => __( \'No CPTs found in Trash.\', \'your-plugin-textdomain\' )
);
$args = array(
\'labels\' => $labels,
\'public\' => true,
\'publicly_queryable\' => true,
\'show_ui\' => true,
\'show_in_menu\' => true,
\'query_var\' => true,
\'capability_type\' => \'post\',
\'has_archive\' => true,
\'hierarchical\' => false,
\'supports\' => array( \'title\', \'editor\', \'author\', \'thumbnail\', \'excerpt\', \'comments\' )
);
register_post_type( \'cpt\'.$i, $args );
}
}
这允许我修改for循环中的数字,以注册越来越多的帖子类型。注册帖子类型的成本非常高。
以下是200的截图:
我让firefox拍摄了一张全页截图,并在推特上发布了它,但推特图像服务无法处理这些尺寸。
这是在WP 5.2.4上具有默认主题的快速机器上,并且仅为定时测量激活了查询监视器。
值得注意的是,平均速度约为0.1s/0.2s,200次CPT后,平均速度上升到0.4/0.6s。还要注意的是,管理端菜单完全不可用,菜单顺序系统已经崩溃。您需要对此进行说明,并在注册帖子类型时指定一个值。
显然这还不够,我决定进一步推动。
大约400个CPT的侧菜单中断并溢出,此时平均加载时间约为1.6-1.7s,这意味着仅通过CPT注册就至少增加了一秒半。
我把它增加到2000个CPT:
请注意,页面现在平均需要10秒才能加载。内存消耗也飙升至30MB
我将数字增加到20k,网站无法加载。我将其减少到10k,然后是5k,最后该站点恢复到4k CPT
为了加载permalinks设置页面,我必须下载到2k CPT。此时,页面加载耗时13秒,生成的管理页面传输量为12.7MB,其中大部分是侧菜单标记