🎨 后台侧边栏菜单样式优化
文件位置:assets/css/admin-flat-rounded.css- 功能描述: 修改后台侧边栏菜单选中状态的文字颜色,从白色改为深紫色
- 核心优化点:
- 代码修改:
assets/css/admin-flat-rounded.css
– 第29行:修改主菜单选中状态样式 color:#ffffff !important 为 color:#4b0082 !important
– 第30行:修改子菜单选中状态样式 color:#ffffff !important 为 color:#4b0082 !important
- 优化效果:
✍️ 写文章入口新标签页打开
文件位置:core/module/fun-admin.php · assets/js/admin-view-newtab.js- 覆盖范围:顶部“新建→文章”、侧边“文章→写文章”、文章列表页右上角“新增文章 / Add New”
- 新标签与安全:统一添加
target="_blank"与rel="noopener noreferrer",避免后台页被覆盖与提升安全性 - 代码寻找
wp-content/themes/lolimeow/core/module/fun-admin.php:338-346
– 后台统一新标签脚本:wp-content/themes/lolimeow/assets/js/admin-view-newtab.js:1-12
💊 药丸短代码样式修复(Bootstrap 5 兼容)
文件位置:core/module/fun-shortcode.php- 修复原因:旧类名
badge-primary等在 Bootstrap 5 已弃用;bg-gradient-不存在,导致[ yaowan]前端样式不生效 - 修复方案:统一改用
text-bg-颜色类,并通过bg-gradient叠加实现渐变;内容输出使用wp_kses_post进行安全过滤 - 支持值:
1–8 纯色:primary / secondary / info / success / danger / warning / light / dark
– 9–16 渐变:在上述纯色基础上叠加 bg-gradient- 用法示例:
[ yaowan style='5']危险[/yaowan] → < span class="badge text-bg-danger mb-1 mt-1">危险</span>
– [ yaowan style='9']主要[/yaowan] → < span class="badge text-bg-primary bg-gradient mb-1 mt-1">主要</span>- 影响范围:仅影响
[ yaowan]短代码的前端徽章渲染,不改动其它短代码寻找
🧾 代码短代码与复制修复([ precode])
文件位置:core/module/fun-shortcode.php · assets/js/boxmoe.js · assets/js/quicktags.js- 编辑器包装清理:清理短代码内容中的
< p>/< div>/< br>等编辑器注入标签,使用shortcode_unautop转换换行并做trim,防止被当作 HTML 渲染 - 安全转义:最终以
< pre>< code>…< / code>< / pre>输出,并对内容esc_html确保纯文本显示(防 XSS/标签破坏) - 参数支持:
linenums控制是否显示行号,lang指定高亮语言(Prettify 的lang-*) - 复制纯文本:复制按钮改用
data-clipboard-text,从ol.linenums li聚合文本,自动去除行号与首尾空行 - 经典编辑器按钮:将“代码高亮”按钮改为插入短代码
[ precode]…[/precode],统一渲染路径
- 短代码定义与清理:
wp-content/themes/lolimeow/core/module/fun-shortcode.php:136-156 - 复制逻辑修复:
wp-content/themes/lolimeow/assets/js/boxmoe.js:590-615 - 经典按钮替换:
wp-content/themes/lolimeow/assets/js/quicktags.js:8
- 基本:
[ precode]你的代码[/precode] - 指定语言:
[ precode lang="js"]const a=1;[/precode] - 关闭行号:
[ precode linenums="0"]...[/precode]
🧾 代码短代码深度优化([ precode] 防自动分行/粘贴清理)
文件位置:core/module/fun-shortcode.php · assets/js/tinymce-precode-paste.js · assets/js/tinymce-clear-format.js · assets/js/clear-format-quicktags.js · core/module/fun-admin.php · assets/css/style.css- 服务端清洗:在短代码渲染阶段彻底移除编辑器注入的块级标签,将
归一化为单换行,并压缩多余空行(fun-shortcode.php:116–123) - 粘贴前拦截:TinyMCE 在粘贴含
[ precode]的内容时,自动清理内部的
/<p>/<span>/
包装并归一化换行,避免将样式粘入代码块(assets/js/tinymce-precode-paste.js:1–61,注册于 core/module/fun-admin.php:47–50)
- 清除格式增强:可视化编辑器与文本编辑器的“清除格式”按钮同时支持标签剥离与换行归一化(
tinymce-clear-format.js:41–53、clear-format-quicktags.js:41–55) - 显示层禁止折行:对
.prettyprint及其子节点(含ol.linenums/li/code/span)统一强制white-space: pre并禁用断词,长行以水平滚动呈现(assets/css/style.css:518–522)
🔄 修复后台访问重定向循环问题
文件位置:core/module/fun-user.php · core/module/fun-admin.php- 问题描述:部分设备访问后台链接时出现”当前无法使用此页面 – gl.baimu.live 重定向你太多次”错误(ERR_TOO_MANY_REDIRECTS)
🔹 修复方案
1. 修复登录页面重定向函数 (boxmoe_custom_login_redirect)
- 增强循环检测:添加HTTP_REFERER检查,避免从本站重定向时导致循环
- 优化redirect_to参数处理:检查redirect_to是否会导致循环,避免重定向到wp-login.php本身
- 安全重定向逻辑:确保自定义登录页面不是wp-login.php,防止循环重定向
2. 修复后台访问限制函数 (boxmoe_restrict_admin_access)
- AJAX请求排除:添加wp_doing_ajax()检查,避免影响正常的AJAX操作
- 认证页面排除:排除登录、注册和密码重置页面,确保用户可以正常认证
- 首页循环防护:添加首页检查,避免重定向循环到首页
🔹 修复效果
- 管理员可以正常访问后台
- 非管理员用户被正确重定向
- 登录页面重定向不会导致循环
- 各种边缘情况都得到了妥善处理
🔹 代码寻找
- 登录页面重定向修复:
core/module/fun-user.php:376-402 - 后台访问限制修复:
core/module/fun-admin.php:86-105
🏷️ 页面标语默认值优化
- 功能描述:将后台主题设置中”页面标语设置”的所有英文默认值改为中文
- 修改项:
- 实现方式:修改设置面板的默认值配置
- 代码寻找:
wp-content/themes/lolimeow/core/panel/settings/set-slogan.php - 影响范围:新安装主题或重置设置时,所有页面标语将默认显示中文
🚀 看板点击回到顶部功能修复
文件位置:footer.php · assets/js/boxmoe.js- 问题描述:点击页面右下角的看板图片无法回到顶部
- 修复内容:
<li>包裹,确保符合HTML规范
– JavaScript优化:将直接事件监听器改为事件委托方式,增强了代码的健壮性
– 平滑滚动实现:使用window.scrollTo({ top: 0, behavior: 'smooth' })实现平滑滚动效果
– 事件处理增强:使用setTimeout确保事件冒泡完成,避免其他事件处理函数的影响
代码寻找
- HTML结构修复:
footer.php(看板元素包裹) - JavaScript实现:
assets/js/boxmoe.js(initBackToTop函数)
- 确保后台已开启看板功能:后台 → 外观 → 盒子萌主题设置 → 基础设置 → 网页右侧看板开关
- 点击页面右下角的看板图片,页面会平滑滚动到顶部
- 点击看板图片时,页面平滑滚动到顶部
- 保持了原有的HTML结构和CSS样式
- 增强了代码的适应性,能够处理动态生成的元素和嵌套元素的点击
🛠️ 修复erphpdown插件imagedestroy函数弃用警告
文件位置:wp-content/plugins/erphpdown/includes/qrcode.class.php- 问题描述:intelephense报告了3处P1007弃用警告,
imagedestroy函数在PHP 8.0.0中被弃用 - 修复内容:
png()方法中的ImageDestroy($image);
– 移除了第974行:jpg()方法中的ImageDestroy($image);
– 移除了第1003行:image()方法中的ImageDestroy($base_image);
问题原因
- 在PHP 8.0.0版本中,
imagedestroy函数被弃用 - PHP现在会自动管理图像资源的内存释放,不再需要手动调用该函数
- ✅ 消除了所有intelephense报告的P1007弃用警告
- ✅ 代码功能保持不变,因为PHP会自动释放图像资源
- ✅ 代码更加简洁,符合现代PHP最佳实践
- ✅ 确保了插件与PHP 8.0+版本的兼容性
🛠️ Erphpdown 插件设置提示修复
文件位置:wp-content/plugins/erphpdown/includes/init.php
- 问题描述: Erphpdown 插件安装后,即使填写了所有设置,管理后台仍然一直显示 “Erphpdown插件需要先设置下哦!” 的提示信息
- 问题原因: 代码中检查的
ice_proportion_alipay选项在设置页面表单中缺失对应的输入字段,导致该选项始终为空,从而触发提示信息一直显示
- 解决方案: 在
init.php文件中添加默认值逻辑,当ice_proportion_alipay为空时,自动设置默认值为 1 并更新到数据库
- 技术实现: 修改了插件的初始化代码,添加了默认值设置逻辑:
$ice_proportion_alipay = get_option('ice_proportion_alipay');
// 设置默认值,避免一直显示提示信息
if(!$ice_proportion_alipay){
$ice_proportion_alipay = 1; // 默认1元人民币等于1个虚拟货币
update_option('ice_proportion_alipay', $ice_proportion_alipay);
}
- 修复效果:
- 适用场景: 适用于所有使用 Erphpdown 插件的 WordPress 网站,特别是新安装或刚设置插件的网站
📄 文章卡片点击优化
文件位置: page/template/blog-list.php · assets/css/style.css
- 功能描述:当前文章卡片需要点击图片、标题才会跳转文章页,改为点击整个文章卡片就能跳转到文章页,同时保持现有样式层级,确保能正常选中文字和右键图片
- 解决方案:使用透明伪容器+CSS pointer-events属性的方案来实现点击整个卡片跳转的功能
- 核心特性:
- 技术实现:
post-card-link,覆盖整个卡片区域
– 设置CSS样式:
– .post-list设置为相对定位,overflow: visible
– .post-card-link设置为绝对定位,top: 0; left: 0; right: 0; bottom: 0,z-index: 10
– .post-list-img和.post-list-content设置z-index: 20,确保它们显示在透明容器上方
– .post-list-img和.post-list-content设置pointer-events: none,让鼠标事件穿透到下层的透明容器
– 为链接和图片设置pointer-events: auto,确保它们可以正常交互
– 为文字和标签设置pointer-events: none,确保它们的鼠标事件也能穿透到下层的透明容器
代码寻找:
- 文章卡片HTML结构:
page/template/blog-list.php - CSS样式规则:
assets/css/style.css
- 修改
blog-list.php文件,在article标签内部添加透明伪容器 - 修改
style.css文件,添加相应的CSS样式规则 - 保存修改后,刷新页面即可看到效果
- 不改变原有HTML结构和样式层级
- 保持良好的用户体验
- 支持多种交互操作
- 代码简洁,易于维护
🔒 登录状态相关问题修复
📱 导航栏用户信息显示修复
文件位置:assets/js/boxmoe.js- 问题描述:用户已登录,但访问文章页面时,导航栏上不显示用户信息,而是出现了【登录/注册】模块
- 修复内容:修改
renderLoginUI函数,移除移动端和桌面端用户面板渲染的条件判断,确保无论是否存在现有面板,都会根据当前登录状态创建正确的用户面板 - 修复效果:用户已登录时,导航栏会正确显示用户信息,不再出现登录/注册模块
📝 登录状态检查失败修复
文件位置:core/module/fun-markdown.php- 问题描述:浏览器控制台显示错误:
boxmoe.js?ver=14.46:596 登录状态检查失败: 无效的请求 - 修复内容:将任务清单的 AJAX 对象从
ajax_object改为task_ajax_object,避免覆盖fun-basis.php中定义的完整ajax_object - 修复效果:登录状态检查不再返回错误,能够正确检查和更新用户登录状态
📄 页面显示问题修复
📖 文章页面无法正常显示修复
文件位置:page/template/blog-single.php- 问题描述:首页能正常显示,但是文章页面和其他页面都不能正常显示
- 修复内容:删除第8-16行的错误HTML代码片段,修复HTML结构
- 修复效果:文章页面和其他页面都能正常显示
💡 技术总结
- HTML结构完整性:在模板文件中必须确保HTML结构完整和正确,否则会导致整个页面无法正常显示
- JavaScript对象命名冲突:在使用
wp_localize_script时,要注意避免不同功能模块之间的对象名冲突,否则会导致功能失效 - WordPress Nonce验证机制:在使用AJAX请求时,必须确保前后端使用相同的nonce名称和值,否则会导致验证失败
- 条件渲染逻辑健壮性:在编写条件渲染逻辑时,要确保所有情况下都能正确渲染UI,避免出现边界情况导致功能失效
📋
短代码优化
文件位置: core/module/fun-shortcode.php · assets/css/style.css
- 功能描述:优化
- 优化内容:
ol 标签改为正确的 li 标签
– 将过大的缩进效果改为只缩进一个文字
– 移除序号显示,仅保留圆形标记
– 优化虚线下划线,使其与文字缩进同步
– 添加平滑的悬停动画效果- 技术实现:
<ol> 改为 <li>,外部容器从 <ul> 改为 <ol>
– 缩进优化:调整 CSS 中列表项的 padding-left 属性,从 15px 改为 25px,仅缩进一个文字
– 序号移除:删除计数器相关样式,移除 counter-increment 属性和 :before 伪元素的序号内容
– 下划线优化:将下划线从 border-bottom 改为使用 :before 伪元素实现,并调整其位置和宽度,使其与文字缩进同步
– 悬停动画:添加 transition: all 0.3s ease-in-out 属性,使悬停效果更平滑
代码位置:
- PHP 实现:
core/module/fun-shortcode.php第 59-71 行 - CSS 样式:
assets/css/style.css第 2528-2533 行
- 列表缩进更加紧凑美观,仅缩进一个文字
- 移除了不必要的序号,仅保留圆形标记
- 虚线下划线与文字缩进对齐,视觉效果更协调
- 悬停效果平滑自然,提升用户体验
- 保持了原有功能和整体样式的一致性
MD语法任务清单nonce验证修复
📋 问题描述
MD语法任务清单在前端交互时,点击更新任务状态会提示”无效的nonce”错误,导致任务状态无法正常更新。💡 解决方案
修复前端代码中错误的nonce来源,使用专门为任务状态更新准备的nonce值和AJAX URL。🔧 具体修改
1. 修复JavaScript中的nonce验证
文件位置:assets/js/boxmoe.js- 问题:前端代码使用了错误的nonce来源,导致服务器返回”无效的nonce”错误
- 修复:将nonce来源从
window.ajax_object.nonce改为window.task_ajax_object.nonce - 代码修改:
// 添加nonce验证
if (window.task_ajax_object && window.task_ajax_object.nonce) {
formData.append('nonce', window.task_ajax_object.nonce);
} else {
showNotification('更新任务状态失败: 缺少安全验证', 'error');
removeSyncingState(taskItem, currentStatus);
return;
}
// 确保task_ajax_object存在
if (!window.task_ajax_object || !window.task_ajax_object.ajaxurl) {
showNotification('更新任务状态失败: 无法获取服务器地址', 'error');
removeSyncingState(taskItem, currentStatus);
return;
}
const response = await fetch(window.task_ajax_object.ajaxurl, {
method: 'POST',
credentials: 'same-origin',
body: formData
});
✅ 修复效果
- 🎯 修复了”无效的nonce”错误提示
- 📝 任务状态可以正常更新
- 🔒 保持了安全验证机制
- 🔄 确保了任务状态的同步更新
📌 技术说明
- 问题根源:前端代码使用了通用的
ajax_object.nonce,但后端验证需要专门的boxmoe_task_statusnonce - 修复要点:使用
task_ajax_object.nonce替代ajax_object.nonce,确保与后端验证匹配 - 安全机制:nonce验证用于防止CSRF攻击,确保只有合法用户才能更新任务状态
- 数据流向:用户点击任务项 → 前端发送AJAX请求(带正确nonce) → 后端验证nonce → 更新文章内容 → 返回成功响应
🎨 使用示例
在Markdown中使用任务清单:
- [ ] 待完成任务
- [x] 已完成任务
- [>] 进行中任务
用户点击任务项时,状态会自动更新并同步到服务器,不会再出现”无效的nonce”错误。
📋 相关文件
- 前端实现:
assets/js/boxmoe.js– 处理任务状态更新的AJAX请求 - 后端实现:
core/module/fun-markdown.php– 生成任务清单HTML和处理AJAX请求 - 安全验证:
wp_create_nonce('boxmoe_task_status') – 生成nonce
– 前端:window.task_ajax_object.nonce – 存储nonce
– 验证:wp_verify_nonce($_POST['nonce'], 'boxmoe_task_status') – 验证nonce
🚀 性能优化
- 减少不必要的请求:仅在用户点击任务项时发送AJAX请求
- 异步处理:使用async/await确保请求不会阻塞UI
- 错误处理:完善的错误提示机制,确保用户体验
- 状态管理:添加同步状态标记,避免重复请求
📝 代码质量
- 代码可读性:添加了清晰的注释,便于后续维护
- 错误处理:完善的异常捕获机制
- 安全验证:严格的nonce验证,防止CSRF攻击
- 兼容性:考虑了各种边界情况,确保代码稳健运行
✨ Markdown编辑器优化
🔧 工具栏按钮点击优化
文件位置:assets/js/markdown-editor.js
- 问题描述:在编辑文章时,点击Markdown编辑器的工具栏按钮会导致页面下移,影响编辑体验
- 解决方案:在工具栏按钮点击事件处理函数中,添加保存和恢复页面滚动位置的逻辑,防止浏览器自动滚动到文本框位置
- 具体修改:
var insert = function(prefix, suffix, placeholder){
var el = $ta.get(0);
var start = el.selectionStart||0;
var end = el.selectionEnd||start;
var val = $ta.val();
var sel = val.substring(start,end)|| (placeholder||'');
var out = val.substring(0,start)+prefix+sel+suffix+val.substring(end);
$ta.val(out);
// 保存当前滚动位置
var scrollTop = $(window).scrollTop();
el.focus();
el.selectionStart = start+prefix.length;
el.selectionEnd = start+prefix.length+sel.length;
// 恢复滚动位置,防止页面下移
$(window).scrollTop(scrollTop);
};
- 优化效果:
- 技术说明:
el.focus()前保存当前滚动位置
– 调用el.focus()和设置选区后,恢复之前保存的滚动位置
– 使用$(window).scrollTop()方法获取和设置页面滚动位置
– 确保了编辑体验的流畅性,提升了用户体验
评论(2)