WordPress文章数量过多时文章编辑器卡死或加载慢的优化排查和处理建议

玩技站长
玩技站长
玩技站长
管理员, Keymaster
10834
文章
669
评论
运维笔记评论452字数 1010阅读3分22秒阅读模式
这个问题来自对post_meta表的一个慢查询:
SELECT DISTINCT meta_key 
FROM wp_postmeta 
WHERE meta_key NOT BETWEEN '_'
AND '_z' 
HAVING meta_key NOT LIKE '\\_%' 
ORDER BY meta_key 
LIMIT 30
该查询由WordPress文章编辑器的Meta Box功能发起。

该问题的原因是MySql中普通索引的长度最长为767字节,如果使用的是utf8mb4编码的话,那么总的字符长度就是767/4,约为191,而WordPress的post_meta表的meta_key列的字符长度则是255。

所以此时因为meta_key的长度超范围,索引并未生效。解决方案可以选择把数据库编码更改为utf8或是将meta_key的长度更改为191,再或者是禁用掉Meta Box功能。文章源自玩技e族-https://www.playezu.com/501956.html

当然,提醒一句,这些更改都可能会破坏兼容性,所以更改前请务必做好测试工作。文章源自玩技e族-https://www.playezu.com/501956.html

导致性能问题的原因千奇百怪,具体情况要具体分析再针对性解决。so,本文所述方案不一定对你有用,但可提供一个思考的方向。文章源自玩技e族-https://www.playezu.com/501956.html

WordPress的文章和页面编辑窗口附带了很多功能模块(Meta Boxes),有些不常用的可以选择屏蔽掉,今天给大家分享如何通过代码屏蔽WordPress文章和页面发布页的Meta Boxes。
移除多余模块

WordPress文章数量过多时文章编辑器卡死或加载慢的优化排查和处理建议插图
根据个人需求,将下面的代码添加到主题的 functions.php 文件中:文章源自玩技e族-https://www.playezu.com/501956.html

//移除文章编辑界面默认的Meta模块
function remove_my_post_metaboxes() {
remove_meta_box( 'authordiv','post','normal' ); // 作者模块
remove_meta_box( 'commentstatusdiv','post','normal' ); // 评论状态模块
remove_meta_box( 'commentsdiv','post','normal' ); // 评论模块
remove_meta_box( 'postcustom','post','normal' ); // 自定义字段模块
remove_meta_box( 'postexcerpt','post','normal' ); // 摘要模块
remove_meta_box( 'revisionsdiv','post','normal' ); // 修订版本模块
remove_meta_box( 'slugdiv','post','normal' ); // 别名模块
remove_meta_box( 'trackbacksdiv','post','normal' ); // 引用模块
 
remove_meta_box( 'categorydiv','post','normal' ); // 分类模块
remove_meta_box( 'formatdiv','post','normal' ); // 文章格式模块
remove_meta_box( 'submitdiv','post','normal' ); // 发布模块
remove_meta_box( 'tagsdiv-post_tag','post','normal' ); // 标签模块
}
add_action('admin_menu','remove_my_post_metaboxes');
 
//移除文章特色图像模块
add_action('do_meta_boxes', 'remove_thumbnail_box');
function remove_thumbnail_box() {
    remove_meta_box( 'postimagediv','post','side' );
}

//移除页面编辑窗口的模块
function remove_my_page_metaboxes() {
remove_meta_box( 'postcustom','page','normal' ); // 自定义字段模块
remove_meta_box( 'postexcerpt','page','normal' ); // 摘要模块
remove_meta_box( 'commentstatusdiv','page','normal' ); // 评论模块
remove_meta_box( 'pageparentdiv','page','normal' ); // 页面属性模块
remove_meta_box( 'slugdiv','page','normal' ); // 别名模块
remove_meta_box( 'authordiv','page','normal' ); // 作者模块
remove_meta_box( 'submitdiv','page','normal' ); // 发布模块
 
}
add_action('admin_menu','remove_my_page_metaboxes');
 
//移除页面特色图像模块
add_action('do_meta_boxes', 'remove_page_thumbnail_box');
function remove_page_thumbnail_box() {
    remove_meta_box( 'postimagediv','page','side' );
}
移除自定义模块

以上的代码足够移除WordPress自带的Meta模块了,如果要移除主题或插件创建的Meta模块,我们需要在浏览器中查看这个页面的源代码,找到这个模块对应的ID。从源代码可以看到,“主题自带面板”的ID是 tagsdiv-sitetag,接着在主题中通过 do_meta_boxes 这个add_action 来移除:文章源自玩技e族-https://www.playezu.com/501956.html

WordPress文章数量过多时文章编辑器卡死或加载慢的优化排查和处理建议插图1
//移除特定模块
add_action('do_meta_boxes', 'remove_new_custom_box');
function remove_new_custom_box() {
    remove_meta_box( 'tagsdiv-sitetag','post','normal' );
}
如果只需要为非管理员移除Meta模块,将下面的代码添加到主题的 functions.php 文件中:
//为非管理员移除文章编辑界面默认的Meta模块
function remove_meta_boxes()
{
    if (!current_user_can('administrator') && !current_user_can('subadmin'))
    {
        remove_meta_box( 'authordiv','post','normal' ); // 作者模块
        remove_meta_box( 'commentstatusdiv','post','normal' ); // 评论状态模块
        remove_meta_box( 'commentsdiv','post','normal' ); // 评论模块
        remove_meta_box( 'postcustom','post','normal' ); // 自定义字段模块
        remove_meta_box( 'postexcerpt','post','normal' ); // 摘要模块
        remove_meta_box( 'revisionsdiv','post','normal' ); // 修订版本模块
        remove_meta_box( 'slugdiv','post','normal' ); // 别名模块
        remove_meta_box( 'trackbacksdiv','post','normal' ); // 引用模块
        remove_meta_box( 'categorydiv','post','normal' ); // 分类模块
        remove_meta_box( 'formatdiv','post','normal' ); // 文章格式模块
        remove_meta_box( 'submitdiv','post','normal' ); // 发布模块
        remove_meta_box( 'tagsdiv-post_tag','post','normal' ); // 标签模块
    }
}
add_action('do_meta_boxes', 'remove_meta_boxes');
文章源自玩技e族-https://www.playezu.com/501956.html文章源自玩技e族-https://www.playezu.com/501956.html
 最后更新:2023-2-23
匿名

发表评论

匿名网友
确定

拖动滑块以完成验证