WordPress属性中的空格导致问题

时间:2014-03-25 作者:Aaron

我正在尝试编写我的第一个字幕插件,但遇到了一些困难。

我正在设置这样的短代码:

function Shortcode_Caption( $atts, $content=null ){

   // DEFAULT ARGUMENTS ARRAY       
   $args=shortcode_atts( array(
    \'caption\' => \'Caption\',
    \'link\' => \'http://www.link.com\'
   ), $atts);

   // ENCLOSED SHORTCODES
   if($content){
      return \'<div class="Container-Caption" 
        alt="\'. $args[\'caption\'] .\'" 
        rel="\'. $args[\'link\'] .\'">
          \'.$content.\'</div>\';
   };
};  

add_shortcode( \'Caption\', \'Shortcode_Caption\' );
一些JS从那里得到了它。因此,当使用短代码时:

[Caption caption="This is the Text" link="http://www.go_here.com"]some content[/Caption]
由于“caption”属性中有空格,上述操作不起作用。但是,删除空间的效果是100%:

[Caption caption="Text" link="http://www.go_here.com"]some content[/Caption]
我不知道我做错了什么?谢谢

1 个回复
SO网友:s_ha_dum

您编写代码的方式正在破坏div 标记几行--如果查看生成的源代码,字面上是这样的:

<div class="Container-Caption" 
        alt="Oh I have been to Ludlow Fair" 
        rel="http://www.link.com">
          blah</div>
我看不出使用带空格或不带空格的标题有什么不同,但如果不是真的错的话,那么这样破坏标签是不标准的(根据一些非常快速的研究,它似乎实际上并没有错)。它看起来确实像是Javascript可能会被扼杀的东西。我建议重写它,以便生成更典型的标记。

function Shortcode_Caption( $atts, $content=null ){

   // DEFAULT ARGUMENTS ARRAY       
   $args=shortcode_atts( array(
    \'caption\' => \'Caption\',
    \'link\' => \'http://www.link.com\'
   ), $atts);

   // ENCLOSED SHORTCODES
   if($content){
      $ret = \'<div class="Container-Caption"\'; 
      $ret .= \' alt="\'. $args[\'caption\'] .\'"\';
      $ret .= \' rel="\'. $args[\'link\'] .\'">\';
      $ret .=  $content.\'</div>\';
      return $ret;
   };
};  

add_shortcode( \'mycaption\', \'Shortcode_Caption\' );

echo do_shortcode(\'[mycaption caption="Oh I have been to Ludlow Fair" ]blah[/mycaption]\');
还请注意,您违反了法典中明确规定的规则:

Shortcode names should be all lowercase 使用所有字母,但数字和下划线也可以。小心使用连字符(破折号),最好不要使用它们。

http://codex.wordpress.org/Shortcode_API

结束

相关推荐

如何将一段代码放在DO_SHORTCODE()中的[Shortcode][/Shortcode]之间?

所以我想在一个“like lock”后面放一个帖子循环,该锁是由一个插件创建的,该插件使用短代码[to\\u like ID=“XX”]内容[[to\\u like]。但是我没有用插件阻止内容,而是得到了一个包含所有帖子永久链接的页面。所以我想我要问的是,如何将页面内容(即,显示帖子的模板中的循环)放在短代码中,使其被插件隐藏?这就是我现在得到的:foreach ( $posts as $post ) : setup_postdata( $post ); $content