我有一个技术博客,上面有很长的帖子。我正在使用分页(通过<;!--下一页-->)将内容分隔为多个页面。
我在我的一篇文章的每页顶部手动添加了一个html目录(TOC)(以下只是一篇文章的示例,内容会随着文章的变化而变化):
<table class="noborder"><tr><td><ol>
<li class="highlight"><a href="http://www.website.com/tutorials/raspberry-pi-i2c-and-spi/1/">Introduction</a></li>
<li class="nohighlight"><a href="http://www.website.com/tutorials/raspberry-pi-i2c-and-spi/2/">I2C Fundamentals</a></li>
<li class="nohighlight"><a href="http://www.website.com/tutorials/raspberry-pi-i2c-and-spi/3/">I2C on the Raspberry Pi</a></li>
<li class="nohighlight"><a href="http://www.website.com/tutorials/raspberry-pi-i2c-and-spi/4/">Enabling I2C on Raspberry Pi</a></li>
<li class="nohighlight"><a href="http://www.website.com/tutorials/raspberry-pi-i2c-and-spi/5/">I2C Transactions Using Python</a></li>
<li class="nohighlight"><a href="http://www.website.com/tutorials/raspberry-pi-i2c-and-spi/6/">Raspberry Pi to AVR I2C Communication</a></li>
</ol></td></tr></table>
对于帖子中的每个页面,我修改上面的css列表类(改为“highlight”或“nohighlight”),以向用户指示正在查看的页面。通过导航到上面的链接之一,您可以更好地了解我的意思。
事情是这样的。每当我修改页面结构、目录标题等时,我都需要复制然后编辑每个页面的html代码。这对于20多页的帖子来说是一个巨大的痛苦。
有没有一种方法可以实现自动化?我设想了一个在帖子顶部定义所有TOC html格式和页面标题的快捷码,然后是另一个快捷码,我可以使用索引调用TOC来加载html代码,但也可以根据提供的索引值将类值设置为“highlight”或“nohighlight”。
这可能吗?我可以跨短代码“存储”数据吗?或者我可以将TOC数据存储在自定义字段中,然后在访问时有条件地更改其中的数据?
我想知道一点方向。谢谢
<小时>
EDIT
在nmr的帮助下(见下文),我发布了一个使用自定义字段的工作解决方案,该字段适用于我的站点。您需要修改css和html以适应自己的目的。
步骤1)将以下内容添加到函数中。php:
function paginated_toc_function() {
global $numpages;
$post_link = get_permalink();
$page_number = get_query_var(\'page\');
if ($page_number == 0) {
$page_number = 1;
}
$toc_list = get_post_custom_values($key = \'toc\');
$toc = explode(PHP_EOL, $toc_list[0]);
array_unshift($toc, "");
$post_link .= substr($post_link, -1) == \'/\' ? \'\' : \'/\';
$html = \'<table class="noborder"><tr><td><ol>\';
for ($i = 1; $i <= count($toc) && $i <= $numpages; ++$i) {
$highlight = ($i == $page_number) ? \'highlight\' : \'nohighlight\';
$html .= \'<li class="\' .$highlight. \'"><a href="\' . $post_link . $i . \'">\' . htmlspecialchars($toc[$i]) . \'</a></li>\';
}
$html .= \'</td></tr></table></ol>\';
return $html;
}
add_shortcode(\'paginated_toc\', \'paginated_toc_function\');
步骤2)在post中创建新的自定义字段。将其命名为“toc”,并添加一个内容标题表列表,每一个标题都位于新行上。例如:
Introduction
I2C Fundamentals
I2C on the Raspberry Pi
Enabling I2C on Raspberry Pi
I2C Transactions Using Python
Raspberry Pi to AVR I2C Communication
步骤3)添加
[paginated_toc]
在文章的每个分页页面上。我把它放在靠近顶部的地方。完成!