【发布时间】:2017-09-21 07:36:59
【问题描述】:
我正在处理 2 个 WordPress 短代码:
- 一章。 [章节名称=“开始”]...内容...[/chapter]
- 目录 [toc][/toc]。目录需要显示一个简单的章节列表。
规格:
- 一个帖子可以有多个章节。
- 帖子中可以有一个、两个或没有 toc 短代码。
- 目录可以在章节之前或之后,也可以在章节之前和之后。这取决于帖子作者,所以我事先不知道。
- 我不能使用嵌套的短代码,因为编写者很难使用它们。
我想过使用静态 toc 数组在每个章节标签处添加章节,然后将其输出到 toc 短代码中。唉,toc 短代码可以出现在章节之前,然后数组将为空。
以下帖子 html 不会显示目录:
[toc][/toc]
Here is some content
[chapter name="hello"]xxx[/chapter]
In between content may come here
[chapter name="world"]yyy[/chapter]
Some more stuff
这是我的起始代码(嵌入到一个类中):
public static function register_chapter_shortcode($atts, $content=null){
$atts = shortcode_atts (
array (
'name' => '',
), $atts );
$name = $atts["name"];
if (self::$toc == null){
self::$toc = array ($name);
} else {
array_push(self::$toc, $name);
}
return '
<h2>'.$atts["name"].'</h2>
<div>'.do_shortcode($content).'</div>'
;
}
public static function register_toc_shortcode($atts, $content=null){
$items = "";
foreach (self::$toc as $item){
$items = $items. '<li><a href="#">'.$item.'</a></li>';
}
return '
<ul>'.$items.'</ul>
';
}
【问题讨论】:
-
你打算从
register_chapter_shortcode显示什么输出? -
这并不重要。你可以假设:return do_shortcode($content);
-
所以你确实打算输出一些东西?如果你不这样做,你可以将
[toc]移到最后。register_toc_shortcode在register_chapter_shortcode设置self::$toc之前运行,所以它没有任何显示。问题在于函数运行的顺序,因此无论哪种方式,您都必须将[toc]移动到末尾。如果您需要在[chapter]中显示某些内容,我看到的唯一方法是(1)将 all 内容保存到register_chapter_shortcode中的self::$toc并在之后输出register_toc_shortcode中的所有内容[chapter]s 或 (2) 使用 jQuery 将 toc 插入 DOM -
是的。我正在输出东西。章节名称等等。 TOC 可以在顶部或底部(我听说有些用户想要两次)。这就是让它变得复杂的原因:用户。大声笑
-
您应该确保从一开始就在您的问题中有所有您的要求。在短代码之间包含文本需要完全不同的方法。我浪费了很多时间来准备下面的答案以满足您的初始要求,而且我现在没有更多的时间来帮助您。希望别人会。我还认为您正试图通过短代码实现太多目标,它们并不适用于任何复杂的东西 - 您正试图使用它们来处理来自编辑器的内容。有没有其他方法可以使用,例如自定义字段?