如何创建自定义In-Post模板?

时间:2012-03-24 作者:Martin Thoma

我写关于数学和计算机科学的帖子。这些帖子中的许多都需要一些以前的知识。我想为一些文章创建一个框,其中包含这些基础知识的链接UbuntuUsers. 在我的文章中,我想这样添加它们

{{previousKnowledge|<a href="...">first</a>|<a href="...">second</a>}}
此任务是否存在插件?

我可以创建一个基本上用以下内容替换此文本的自定义模板吗?

<div id="previousKnowledge">
  <ul>
    <li><a href="" id="source-1">first</a></li>
    <li><a href="" id="source-2">second</a></li>
  </ul>
</div>

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

首先:好主意。我不知道这个任务是否有插件,但我只想把它作为一个新的小插件来实现。

我建议您更改语法,这样它就不会包含html格式的链接。

我将其更改为:

{{previousKnowledge|first=...|second=...}}
以下是我的第一个简单方法:

<?php
    /*
     Plugin Name: Previous Knowledge
    Plugin URI: TODO
    Description: TODO
    Author: xaeDes
    Version: 0.1
    Author URI: TODO
    License: GPL2
    */


    function previous_knowledge_preg_replace_callback( $matches ) {
        //$matches[1] contains the \'...\' in \'{{previousKnowledge|...}}\'
        $items = explode("|", $matches[1]);
        $replaced = \'<div id="previousKnowledge"><ul>\';
        foreach( $items as $item ) {
            $item_info = explode("=",$item);
            $replaced .= "<li><a href=\'${item_info[1]}\'>${item_info[0]}</a></li>";
        }
        $replaced .= \'</ul></div>\';
        return $replaced;
    }

    /**
     * Looks for occurrences of {{previousKnowledge|...}} tags and replaces them by html.
     * @param string $content
     * @return string
     */
    function previous_knowledge_content_filter( $content ) {
        return preg_replace_callback(\'#{{previousKnowledge\\\\s*\\\\|(.+)}}#i\',\'previous_knowledge_preg_replace_callback\', $content);
    }

    add_filter( \'the_content\' , \'previous_knowledge_content_filter\' );
?>
我用你的例子进行了测试,效果很好。

您可以在先前的\\u knowledge\\u preg\\u replace\\u回调(..)中更改输出html。

如何在wordpress中安装:

在wp contents/plugins/中创建一个名为“previous\\u knowledge”(或任何您认为合适的名称)的文件夹。

创建一个名为previous\\u knowledge的php文件。php并将代码粘贴到该文件中。

现在您只需激活它并将“{{previousKnowledge | first=…| second=…}}}进入您的帖子或页面。

Do you want further explanations?

SO网友:Asaf Chertkoff

也许是这样的:

function previousKnowledge_shortcode( $atts ) {
extract( shortcode_atts( array(
    \'urls\' => \'\',
    \'titles\' => \'\'
), $atts ) );

$url = explode("|", $urls);
$title = explode("|", $titles);
$c = count($url) - 1;
$code = \'<div id="previousKnowledge"><ul>\';
for ($i = 0; $i <= $c; $i++) {
    $b = $i +1;
    $code .= \'<li><a href="\'.$url[$i].\'" id="source-\'.$b.\'">\'.$title[$i].\'</a></li>\';
}
$code .= \'</ul></div>\';

return $code;
}

add_shortcode( \'previousKnowledge\', \'previousKnowledge_shortcode\' );
短代码为:[previousKnowledge urls="http://www.site.com|http://www.site2.com|http://www.site3.com" titles="site1|site2|site3"]

它将生成HTML:

<div id="previousKnowledge">
  <ul>
    <li><a href="http://www.site.com" id="source-1">site1</a></li>
    <li><a href="http://www.site2.com" id="source-2">site2</a></li>
    <li><a href="http://www.site3.com" id="source-3">site3</a></li>
  </ul>
</div>
注意:我已经测试过了,所以它可以工作:)。如果有帮助,请告诉我。

结束

相关推荐

U-plugins文件夹中的插件未加载

我正在尝试通过将插件放入mu-plugins 文件夹但是如果插件放在文件夹中,它就不会被加载。我尝试了一些流行的插件,如W3 Total Cache、Yoast的WordPress SEO,但都没有加载。WordPress是否只加载中只有单个文件的插件mu-plugins?