1、不使用 min.js
在 wp-config.php 中增加一行 define( 'SCRIPT_DEBUG', true );
即可让 WordPress 前端不使用 xx.min.js,直接使用 xx.js。
其他更多的调试设置,包括输出 php 日志、打印 sql 执行语句等,请阅读:debugging-in-wordpress
2、BUG,无法删除中文命名的模板
今天遇到一个 WordPress 自身的 BUG,就是当你在编辑文章的时候,创建了一个文章模板,并使用中文命名。然后当你删除这个模板的时候,页面不会有任何提示,但它提交的 ajax post 请求其实返回了一个404错误:
其表面原因是这个 URL 中,在主题名与模板名之间,变成了两个斜杠/。URL 中的 %e8%87%aa%e5%ae%9a%e4%b9%89%e6%a8%a1%e6%9d%bf22 是模板名「自定义模板22」的 URL 编码。
我的开发环境:
WordPress 6.1.1
Nginx 1.23.3
3、DEBUG
在源码中一通乱找跟 ‘delete template’ 有关的信息,先是定位到 core-data.js 文件。
其中 path = “/wp/v2/templates/twentytwentytwo//%e8%87%aa%e5%ae%9a%e4%b9%89%e6%a8%a1%e6%9d%bf22”
组成 path 的 recordId 应该来自 edit-post.js 中的 template.id。
template.id = “twentytwentytwo//%e8%87%aa%e5%ae%9a%e4%b9%89%e6%a8%a1%e6%9d%bf22”
template 来自于
这一小段代码实在看得人太痛苦了,对 javascript 的语法糖简直是无所不用其极。😤
(1) => 箭头函数
(x) => x + 6
相当于
function(x){ return x + 6; }(2) {} 解构
const {foo, bar} = obj
相当于
const foo = obj.foo const bar = obj.bar(3) (0, function)(params) 间接调用
(0, function_name)(params); 等价于 function_name(params); 但是 (0, function_name)(params) 的变量作用域会被扩大。 其本质是: fun1 = (0, function_name) // 逗号隔开的多个表达式,会返回最后一个表达式的结果。(所以前头这个 0,你也可以用任意其他数字或表达式) fun1(params) // 此时 fun1 仍是 function_name,但是内部作用域变了
但是上面的 useSelect 函数源码我还是没看懂。
总之最后能追踪到的就是在 getEditedPostTemplate 函数中,它给加上了双斜杠!
4、解决办法
(1) 已经提交了 BUG 给 WordPress 官网,等他们团队解决。
(2) URL 中的双斜杠处理还跟 HTTP 服务程序有关,我用的是 Nginx, 网上可以找到 Nginx 处理双斜杠的方法。
(3) 临时修改,可以直接在浏览器开发者工具的 console 窗口中,修改 path 变量,删除一个斜杠即可。