WordPress是否支持无限制或大量的自定义帖子类型?

时间:2019-10-24 作者:Mobil Home

Wordpress是否支持无限制或大量自定义帖子类型?

我想建立一个目录站点,其中的帖子将是帖子类型,目录项将是标准的帖子存档条目。

1 个回复
SO网友:Tom J Nowell

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的截图:

enter image description here

我让firefox拍摄了一张全页截图,并在推特上发布了它,但推特图像服务无法处理这些尺寸。

这是在WP 5.2.4上具有默认主题的快速机器上,并且仅为定时测量激活了查询监视器。

值得注意的是,平均速度约为0.1s/0.2s,200次CPT后,平均速度上升到0.4/0.6s。还要注意的是,管理端菜单完全不可用,菜单顺序系统已经崩溃。您需要对此进行说明,并在注册帖子类型时指定一个值。

显然这还不够,我决定进一步推动。

大约400个CPT的侧菜单中断并溢出,此时平均加载时间约为1.6-1.7s,这意味着仅通过CPT注册就至少增加了一秒半。

我把它增加到2000个CPT:

enter image description here

请注意,页面现在平均需要10秒才能加载。内存消耗也飙升至30MB

我将数字增加到20k,网站无法加载。我将其减少到10k,然后是5k,最后该站点恢复到4k CPT

为了加载permalinks设置页面,我必须下载到2k CPT。此时,页面加载耗时13秒,生成的管理页面传输量为12.7MB,其中大部分是侧菜单标记

相关推荐