复制分页投递的目录

时间:2018-07-25 作者:RadianDynamics

我有一个技术博客,上面有很长的帖子。我正在使用分页(通过<;!--下一页-->)将内容分隔为多个页面。

我在我的一篇文章的每页顶部手动添加了一个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] 在文章的每个分页页面上。我把它放在靠近顶部的地方。完成!

1 个回复
最合适的回答,由SO网友:nmr 整理而成

您可以使用将帖子内容拆分为多个页面<!--nextpage-->, 所以你可以使用$page_number = get_query_var( \'page\' ) 获取当前页码和全局变量$numpages 获取当前帖子的页数。

显示目录:

global $numpages;
$post_link = get_permalink();
$page_number = get_query_var( \'page\' );
$toc = [
   1=>\'Introduction\', 
   \'I2C Fundamentals\', 
   \'I2C on the Raspberry Pi\', 
   \'Enabling I2C on Raspberry Pi\', 
   \'I2C Transactions Using Python\', 
   \'Raspberry Pi to AVR I2C Communication\'];

$post_link .= substr($post_link, -1) == \'/\' ? \'\' : \'/\';
$html = \'\';
for( $i = 1; $i <= count($toc) && $i <= $numpages; ++$i) {
    $highlight = ($i == $page_number) ? \'highlight\' : \'nohighlight\';
    $html .= \'<li class="\' .$highlight. \'"><a href="\' . $post_link . $i . \'">\' . $toc[$i] . \'</a></li>\';
}

结束

相关推荐

如何在QUERY_POSTS中的自定义字段上放置orderby

我在我的query\\u帖子中有以下查询,希望向其中添加order by。Order by将位于另一个自定义字段上,并按desc Order排序。这是我现有的查询。//show all active posts for this taxonomy query_posts( array( \'post_type\' => APP_POST_TYPE, \'post_status\' => \'publish\', APP_CUSTOM_TAX