文章侧边栏不显示的问题

问题

友人a的document模板中设置是当文章中没有目录结构时不显示侧边栏。但我设置了标题以后它还是显示不了。

解决方法

在WP的外观-主题文件编辑器中的include/functions/common找到对应的函数如下。

function nicen_theme_navigator()
{

    if (is_single()) {
        $content = get_the_content();

        $h1_number = 1; //h1个数
        $h2_number = 1; //h2个数
        $h3_number = 1; //h3个数

//         $h = "/\

[\s\S]*?\[\/h2\]|\[h1\][\s\S]*?\[\/h1\]|\[h3\][\s\S]*?\[\/h3\]/"; //匹配h1标题的正则 $h="/<h[1-3][^>]*>(.*?)<\/h[1-3]>/i"; preg_match_all($h, $content, $match, PREG_OFFSET_CAPTURE); $replace = ''; // $replace = $content; foreach ($match[0] as $item) { if (strpos($item[0], 'h1') !== false) { $temp = str_replace(['[h1]', '[/h1]'], ['', ''], $item[0]); $replace .= '<li> <div class="first-index"> <div><a href="#h2' . $h1_number . '" title="' . $temp . '">' . $temp . '</a></div> </div> </li>'; $h1_number++; } else if (strpos($item[0], 'h2') !== false) { $temp = str_replace(['[h2]', '

'], ['', ''], $item[0]); $replace .= '<li> <div class="secondary-index"> <div><a href="#h3' . $h2_number . '" title="' . $temp . '">' . $temp . '</a></div> </div> </li>'; $h2_number++; } else if (strpos($item[0], 'h3') !== false) { $temp = str_replace(['

', '

'], ['', ''], $item[0]); $replace .= '<li> <div class="third-index"> <div><a href="#h4' . $h3_number . '" title="' . $temp . '">' . $temp . '</a></div> </div> </li>'; $h3_number++; } } return $replace; } else { $replace = ''; $h1_number = 1; //h1个数 if (have_posts()) { while (have_posts()) { the_post(); /* * 排除不显示的目录文章 * */ if (!canShow()) { continue; } $title = get_the_title(); $replace .= '<li> <div class="first-index"> <div><a href="#h2' . get_the_ID() . '" title="' . $title . '">' . $h1_number . '. ' . $title . '</a></div> </div> </li>'; $h1_number++; } wp_reset_query(); //重置文章指指针 } return $replace; } }

看,原先用于匹配标题的正则是

$h = "/\

[\s\S]*?\[\/h2\]|\

[\s\S]*?\[\/h1\]|\

[\s\S]*?\[\/h3\]/"

但是该网页的html应该是尖括号的<h1> <h2>
我拿这个问题给泡泡看,泡泡建议我改成

$h="/<h[1-3][^>]*>(.*?)<\/h[1-3]>/i"

这样以后就正常显示了。

其他说明

作者原本写的方括号,可能是为了维护在线文本编辑器啥的?不太清楚。总之GPT的答复是这样。
file