为什么我的wordpress短代码没有关闭标签?

时间:2015-01-12 20:17:22

标签: php wordpress wordpress-plugin shortcode

这是我的插件:

add_shortcode('twitter', function($atts, $content) {

    // print_r($atts); die();
    if (!isset($atts['username']) ) $atts['username'] = 'att';
    if ( empty($content) ) $content = 'Follow me on Twitter';

    // shortcode_atts 

    $content .= '<div style="font-family: Arial, sans-serf">';
    $content .= '<h2 style="color:orange">My Plugin here!</h2>';
    $content .= '<a style="color:blue" href="http://twitter.com/' . $atts['username'] .'">' . $content .'</a></div>';

    return $content;
});

我期待只有一个div

<div>
    <h2>My Plugin here!</h2>
    <a href="http://twitter.com/envatowebdev">Please follow me everybody!</a>
</div>

但相反,我得到以下内容:

enter image description here

<div>
    <h2>My Plugin here!</h2>
    <a href="http://twitter.com/envatowebdev">Please follow me everybody!</a>
    <div>
        <a href="http://twitter.com/envatowebdev">
            <h2>My Plugin here!</h2>
        </a>
    </div>

我认为这是因为Wordpress正在阅读我的结尾`[/ twitter]'标签作为新的短代码:

[twitter username="envatowebdev"]Please follow me everybody![/twitter]

但是我所关注的this tutorial的作者没有发生同样的问题,而且我处于HTML文本编辑模式,所以我不确定为什么会这样。

链接到帖子:http://attapi.com/new-post/

[twitter username="envatowebdev"]Please follow me everybody![/twitter]

1 个答案:

答案 0 :(得分:0)

尝试这种方式:

function testf($atts, $content = "") {           



        // print_r($atts); die();
        if (!isset($atts['username']) ) $atts['username'] = 'att';
        if ( empty($content) ) $content = 'Follow me on Twitter';

        // shortcode_atts 
        ob_start();
        ?>
        <div style="font-family: Arial, sans-serf">
            <h2 style="color:orange">My Plugin here!</h2>
            <a style="color:blue" href="http://twitter.com/<?php echo $atts['username']; ?>"><?php echo $content; ?></a></div>
        </div>
        <?php

        $content = ob_get_contents();
        ob_end_clean();

        return $content;
    }