0%
boxmoe_header_banner_img

加载中

「盒子萌Lolimeow」主题二创「纸鸢版🕊️更新」与「🗼开发笔记」


avatar
白木 2025年8月27日 2026年2月13日 1.62k

🐕‍🦺 修复小部件排序下拉框问题

问题描述

Boxmoe_文章侧栏小部件的排序下拉框无法点击,影响用户选择文章排序方式。

问题分析

  1. 主题加载了自定义的下拉框美化脚本(admin-select-ui.js),将原生的select元素替换为自定义的美化版本
  2. 美化脚本没有排除小部件编辑区域,导致小部件中的select元素也被美化
  3. 美化后的下拉框与WordPress的小部件系统产生冲突,导致无法点击

初次修复方案

  1. 在admin-select-ui.js中添加对小部件编辑区域的排除规则
  2. 排除小部件编辑区域(.widget-inside)、小部件内容区域(.widget-content)等
  3. 问题:服务器环境下仍然无法点击

深入分析

  1. 检查SMTP设置页面的下拉框实现方式,发现关键区别:

- SMTP设置页面的下拉框使用了class="regular-text"类
- 小部件中的下拉框没有使用class="regular-text"类

  1. 服务器环境可能存在缓存问题,JS文件版本号固定导致缓存不更新

最终修复方案

  1. 修改JS文件版本控制

- 使用文件修改时间作为版本号,确保文件更新后缓存自动失效
- 更新CSS文件版本号到1.2,确保样式也是最新的

  1. 增强JavaScript兼容性

- 添加jQuery加载检查,确保在jQuery完全加载后才执行代码
- 添加额外的延迟初始化(500ms),确保在所有环境下都能正常工作
- 添加控制台日志,便于调试

  1. 精确的选择策略

- 第一层过滤:只美化有regular-text类的select元素
- 第二层过滤:排除所有小部件区域中的select元素,无论它们是否有regular-text类
- 排除的小部件区域包括:.widget-inside、.widget-content、#widgets-right、.widgets-holder-wrap、.widget

修复效果

  • SMTP设置页面的下拉框(有regular-text类且不在小部件区域)会被美化,保持美观
  • 小部件中的下拉框(即使有regular-text类,但在小部件区域内)不会被美化,保持原生功能
  • 其他有regular-text类的下拉框(不在小部件区域内)会被美化,保持主题一致性

修改文件

  1. /core/module/fun-admin.php - 修改JS文件加载方式,使用动态版本号
  2. /assets/js/admin-select-ui.js - 修改下拉框美化逻辑,添加双重过滤机制




📃 修复代码块中的MD语法被解析为html

🎯 问题描述
在Markdown解析过程中,代码块中的MD语法被错误地解析为HTML代码,导致代码块显示异常。

🔍 问题分析

  1. fun-markdown.php文件中,代码块被正确识别并替换为占位符(如
    // 先处理段落,添加<p>标签
    $parts = preg_split('/\n\n+/', trim($text));
    foreach($parts as &$p){
        // 🎯 检查是否是代码块占位符,如果是则不添加<p>标签
        if(!preg_match('/^\s*<(h\d|ul|ol|pre|blockquote|img|a|table|audio|video)/i',$p) && 
           !preg_match('/^__MD_CODE_\d+__$/', $p)){
            $p = '<p>'.$p.'</p>';
        }
    }
    $text = implode("\n", $parts);
    

  2. 但在段落处理阶段(第183-189行),这些占位符可能会被错误地包裹在

    标签中

  3. 虽然有占位符替换回HTML的代码,但顺序和逻辑存在问题

🛠️ 修复方案

  1. 段落处理优化:在段落处理时添加对代码块占位符的检查,确保占位符不会被错误地包裹在

    标签中

  2. 代码块HTML修复:在代码块占位符替换为HTML后,添加正则表达式移除可能包裹在代码块HTML外的

    标签

📝 具体修改

  1. 修改段落处理逻辑(第183-189行):
// 先处理段落,添加<p>标签
$parts = preg_split('/\n\n+/', trim($text));
foreach($parts as &$p){
    // 🎯 检查是否是代码块占位符,如果是则不添加<p>标签
    if(!preg_match('/^\s*<(h\d|ul|ol|pre|blockquote|img|a|table|audio|video)/i',$p) && 
       !preg_match('/^__MD_CODE_\d+__$/', $p)){
        $p = '<p>'.$p.'</p>';
    }
}
$text = implode("\n", $parts);
  1. 添加代码块HTML清理逻辑(第204-208行):
// 处理代码块占位符
$html = $text;
foreach($blocks as $k=>$v){
    $html = str_replace($k,$v,$html);
}

// 🎯 移除包裹在代码块HTML外的<p>标签
$html = preg_replace('/<p>\s*(<pre class="prettyprint linenums.*?<\/pre>)\s*<\/p>/s', '$1', $html);

return $html;

✅ 修复效果

  • 代码块能够正确渲染,不会被额外的HTML标签干扰
  • 确保代码块占位符(格式为__MD_CODE_数字__)在段落处理时被正确识别
  • 在最终输出前清理可能包裹在代码块外的段落标签

📁 相关文件

  • wp-content/themes/lolimeow-shiroki/core/module/fun-markdown.php




感谢您的支持
微信赞赏

微信扫一扫

支付宝赞赏

支付宝扫一扫



评论(2)

查看评论列表
评论头像
小笨蛋 2026年01月13日
赞!
评论头像
小笨蛋 2026年01月13日
不错不错ツ

发表评论

表情 颜文字
插入代码

北京时间 (Asia/Shanghai)

后退
前进
刷新
复制
粘贴
全选
删除
返回首页
0%
目录
顶部
底部
📖 文章导读