文章侧边栏不显示的问题
- 笔记
- 2024-01-14
- 173热度
- 2评论
问题
友人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的答复是这样。
感谢分享!