基于其他快捷码的WordPress快捷码

时间:2017-09-21 作者:checklist

我有2个WordPress短代码正在使用:

一章。[章名=“开头”]。。。所容纳之物目录[目录]。toc需要显示章节的简单列表规格:

一篇文章可以有很多章节

以下post html将不显示toc:

[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>            
    \';
}

2 个回复
SO网友:Welcher

TOC是否需要是短代码?也许给编辑一个元框,其中包含一组无、下方和上方选项的单选框会更干净?

然后,您可以通过您提到的静态变量方法生成TOC,并在页面呈现期间输出它。

SO网友:kero

由于这些短代码(大部分)将在循环内进行计算,因此可以使用循环函数。最重要的是get_the_content(). 拥有一篇文章的完整内容后,您只需对其进行解析即可获得所有章节及其名称。

正则表达式可能不是最好的,但我发现以下代码可以工作

add_shortcode(\'toc\', function($atts, $content=null){
  $content = get_the_content();
  if ( preg_match_all(\'/\\[chapter.*?name="(.*?)".*?\\]/i\', $content, $matches) ) {
    $chapters = $matches[1];
  } 

  // $chapters has all the "name"s
});
请参见regular expression explained here.

结束

相关推荐

WordPress 4.8.1 php获得评论

您可能知道,当使用<?php 标签,它会自动得到WordPress的评论。有许多著名的插件可以绕过这一点,例如“插入PHP”,但它们在WordPress 4.8.1上不起作用(我测试了一些不推荐的插件)。有人知道如何使用<?php 是否在WordPress 4.8.1中正确标记?