无区块编辑器的WordPress:ClassicPress

有些博友使用WordPress建站,但手动禁用了区块编辑器,换回经典编辑器。那区块相关代码留着也是浪费。所以可以考虑换成ClassicPress。

ClassicPress是WordPress的「非官方」分支,彻底剔除了区块编辑器和AI功能,采用经典编辑器,保留WordPress的使用逻辑,无需重新适应。同时因为禁用了剔除了区块编辑器,安装包小了大约20M空间。

本站由于有些样式是用区块编辑器制作的,暂时没有迁移。但林海爱折腾已经迁移到了ClassicPress。

如何迁移

我是按照官方文档来操作的,仅靠一个插件 + 点击几下鼠标来实现。需要注意的是,当迁移完成后,为避免网站主题的部分自定义功能无法使用,最好启用默认主题,再重新启用正在使用的主题(我的个人经验),原有配置不会因为禁用而失效(真的不会因为禁用而失效,说会失效的你以为这是Typecho呢?)。

迁移完成后,记得安装ClassicPress后台推荐的ClassicPress Directory Integration插件,这样就可以在后台安装ClassicPress商店和WordPress商店的主题和插件了。

由于ClassicPress 2.x版本基于WordPress 6.2,且没有区块功能,因此部分WordPress商店的主题和插件无法安装。这在ClassicPress都有提示。

当然,ClassicPress有个区块兼容性功能(位置:偏好设置—通用):

ClassicPress还有个装饰性功能(位置:偏好设置—通用):

主题适配

由于ClassicPress弃用了部分WordPress内核文件,导致自定义菜单中站点LOGO设置功能不复存在。我自己制作的主题对此进行了单独修复,通过后台URL填写的方式实现LOGO自定义。

原WordPress原生失效代码:

// Custom logo
add_theme_support( 'custom-logo', array(
'height' => 60,
'width' => 200,
'flex-height' => true,
'flex-width' => true,
) );

ClassicPress 兼容替代代码:

// Site Logo URL — ClassicPress-compatible replacement for the native
// "站点身份 → Logo" uploader (which depends on Backbone.js / the media
// frame and is therefore hidden in ClassicPress).
$wp_customize->add_setting( 'wplist_logo_url', array(
'default' => '',
'sanitize_callback' => 'esc_url_raw',
'transport' => 'refresh',
) );
$wp_customize->add_control( 'wplist_logo_url', array(
'label' => __( '站点 Logo 图片地址(URL)', 'list' ),
'section' => 'wplist_theme_settings',
'type' => 'url',
'description' => __( '填写 Logo 图片的完整 URL(如 https://example.com/logo.png)。用于在 ClassicPress 中替代原「站点身份 → Logo」上传功能;留空则显示站点名称。', 'list' ),
) );

我自己制作的主题始终保持前后端样式统一的优势:后台编辑器编辑的内容样式,和前端用户看到的最终效果完全一致。其实,很多近几年的新主题都有这个功能,在ClassicPress上完美兼容。

插件适配

据我观察,不依赖区块功能的主流WordPress插件大多可在ClassicPress中正常使用,例如最新版Akismet、LiteSpeed Cache、UpdraftPlus等。

我使用的众多插件中,仅两款最新版插件存在适配问题:

1. 完全不兼容:Internet Archive Wayback Machine Link Fixer(最新版),不是刚需,舍弃。

2. 存在报错问题:All-In-One Security(AIOS)(最新版)。这是安全插件,为避免站点被黑,必须找插件替代。经过测试,同类型的WP Hide & Security Enhancer插件也存在报错,于是我用多个功能单一的插件来替代。

这些全部支持后台一键安装,没有报错,如下:

插件名称下载来源
Disable Author ArchivesWordPress 商店
ClassicPress Integrity CheckerClassicPress 商店
WPS Hide LoginWordPress 商店
Meta Generator and Version Info RemoverWordPress 商店
Limit Login Attempts NGClassicPress 商店

XML-RPC功能,如不需要可以在后台手动禁用;同时还可以禁用表情、启用链接管理器(位置:偏好设置—通用)。

AIOS的全部防护规则并无法被完整替代。我的服务器是LiteSpeed,于是我利用AIOS的备份,利用AI手动补充了完整的 .htaccess 安全规则,兼容LiteSpeed和Apache。

# ============================================================
# 站点合并安全规则
# 组成:自定义补充(响应头 + uploads 禁 PHP) + AIOS 原有规则
# 服务器:LiteSpeed(兼容 Apache .htaccess)
# ============================================================

# ===================== 自定义安全补充 =====================

# ---------- HTTP 安全响应头(AIOS 卸载后丢失,用代码补回)----------
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set Content-Security-Policy "upgrade-insecure-requests;"
Header always set Referrer-Policy "strict-origin-when-cross-origin"

# ---------- 禁止 wp-content/uploads 执行 PHP(防上传恶意脚本被执行)----------
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^wp-content/uploads/.*\.(php|phtml|php3|php4|php5|phps)$ - [F,L]
</IfModule>

# ===================== AIOS 原有规则(保留)=====================
# BEGIN All In One WP Security
#AIOWPS_BASIC_HTACCESS_RULES_START
<Files .htaccess>
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
</IfModule>
</Files>
ServerSignature Off
LimitRequestBody 10485710
<Files wp-config.php>
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
</IfModule>
</Files>
#AIOWPS_BASIC_HTACCESS_RULES_END
#AIOWPS_DEBUG_LOG_BLOCK_HTACCESS_RULES_START
<Files debug.log>
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
</IfModule>
</Files>
#AIOWPS_DEBUG_LOG_BLOCK_HTACCESS_RULES_END
#AIOWPS_DISABLE_INDEX_VIEWS_START
Options -Indexes
#AIOWPS_DISABLE_INDEX_VIEWS_END
#AIOWPS_DISABLE_TRACE_TRACK_START
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
</IfModule>
#AIOWPS_DISABLE_TRACE_TRACK_END
#AIOWPS_FIVE_G_BLACKLIST_START
# 5G BLACKLIST/FIREWALL (2013) — 较老,留意下方提醒
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} (\"|%22).*(<|>|%3) [NC,OR]
RewriteCond %{QUERY_STRING} (javascript:).*(\;) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3) [NC,OR]
RewriteCond %{QUERY_STRING} (\\|\.\./|`|='$|=%27$) [NC,OR]
RewriteCond %{QUERY_STRING} (\;|'|\"|%22).*(union|select|insert|drop|update|md5|benchmark|or|and|if) [NC,OR]
RewriteCond %{QUERY_STRING} (base64_encode|localhost|mosconfig) [NC,OR]
RewriteCond %{QUERY_STRING} (boot\.ini|echo.*kae|etc/passwd) [NC,OR]
RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC]
RewriteRule .* - [F]
</IfModule>
<IfModule mod_setenvif.c>
SetEnvIfNoCase User-Agent (binlar|casper|cmsworldmap|comodo|diavol|dotbot|feedfinder|flicky|ia_archiver|jakarta|kmccrew|nutch|planetwork|purebot|pycurl|skygrid|sucker|turnit|vikspider|zmeu) keep_out
<limit GET POST PUT>
Order Allow,Deny
Allow from all
Deny from env=keep_out
</limit>
</IfModule>
<IfModule mod_alias.c>
RedirectMatch 403 (https?|ftp|php)\://
RedirectMatch 403 /(https?|ima|ucp)/
RedirectMatch 403 /(Permanent|Better)$
RedirectMatch 403 (\=\\\'|\=\\%27|/\\\'/?|\)\.css$)$
RedirectMatch 403 (\,|$\+|/\,/|\{0\}|$/\(|\.\.\.|\+\+\+|\||\"\\\")
RedirectMatch 403 \.(cgi|asp|aspx|cfg|dll|exe|jsp|mdb|sql|ini|rar)$
RedirectMatch 403 /(contact|fpw|install|pingserver|register)\.php$
RedirectMatch 403 (base64|crossdomain|localhost|wwwroot|e107\_)
RedirectMatch 403 (eval\(|\_vti\_|\(null$|echo.*kae|config\.xml)
RedirectMatch 403 \.well\-known/host\-meta
RedirectMatch 403 /function\.array\-rand
RedirectMatch 403 \)\;\$$this$\.html$
RedirectMatch 403 proc/self/environ
RedirectMatch 403 msnbot\.htm$\.\_
RedirectMatch 403 /ref\.outcontrol
RedirectMatch 403 com\_cropimage
RedirectMatch 403 indonesia\.htm
RedirectMatch 403 \{\$itemURL\}
RedirectMatch 403 function$$
RedirectMatch 403 labels\.rdf
RedirectMatch 403 /playing.php
RedirectMatch 403 muieblackcat
</IfModule>
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
</IfModule>
#AIOWPS_FIVE_G_BLACKLIST_END

# ---------- 防盗链----------
#AIOWPS_PREVENT_IMAGE_HOTLINKS_START
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?blog\.lhcy\.org [NC]
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?lhcy\.org [NC]
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?google\.com [NC]
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?bing\.com [NC]
RewriteRule \.(gif|jpe?g|png|svg|webp)$ - [NC,F,L]
</IfModule>
#AIOWPS_PREVENT_IMAGE_HOTLINKS_END
# END All In One WP Security

文章中插入代码

如果需要在文章中插入代码片段,在ClassicPress后台的操作方式是,粘贴代码片段后,全选对应代码,在编辑器顶部「格式」下拉菜单中,选择「预格式化文本」。

如果已经安装代码高亮插件,可以按插件要求来插入代码。

总结

一句话:如果你不喜欢或彻底用不到区块编辑器,可以考虑迁移到ClassicPress。

3 条评论

  • 这个迁移的意义是什么呢?网站框架更轻量吗?如果更新比wordpress的版本慢,但内核又一样的话,会不会安全漏洞更多,更危险?

    • 确实要轻量一些,后台有些页面打开都变快了。
      它现在的版本是基于WordPress 6.2的,他们的开发者自己打补丁,安全漏洞也是我担心的。因为AIOS不能用,WP Hide & Security Enhancer也不能用,我就找了其他插件,添加.htaccess规则来保证安全。近期我看到有人发文提到站点被黑,也许就是安全加固没做好。