如何使用wordpress短代码

时间:2015-07-23 06:12:20

标签: php wordpress parameter-passing shortcode

这是我想用短代码生成的html - 在WordPress中编辑页面内容时:

<div class="shadow-wrapper half-shadow im-centered">
<div class="box-shadow shadow-effect-2">
<div class="servive-block servive-block-bluemed">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nec nulla vitae lacus. 
</div>
</div>
</div>

这就是我想在编辑框中使用的内容 - 当使用新的短代码时,我将定义:

[box color="bluemed"]
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nec nulla vitae lacus.
[/box]

传递的参数:color =&#34; bluemed&#34;需要成为div类的一部分......如:<div class="servive-block servive-block-bluemed">(参见上面的html代码示例)

以下是我在functions.php文件中添加的内容,以尝试创建这个新的短代码:

function colored_box_shortcode($atts) {
   extract(shortcode_atts(array(
      'color' => grey,
   ), $atts));
  return '<div class="shadow-wrapper half-shadow im-centered">
  <div class="box-shadow shadow-effect-2">
  <div class="servive-block servive-block-'.$color.'">';
}

add_shortcode('box', 'colored_box_shortcode');

function colored_box_end() {
    return '</div>
    </div>
    </div>';
}

add_shortcode('/box', 'colored_box_end');

如您所见,我将颜色属性默认内容设置为灰色,但也允许覆盖并指定从短代码传递的参数中的颜色。

然后,这种颜色需要成为div内部类名的一部分。因此,如果没有传递参数,则类名将变为:&#34; servive-block-grey&#34;。或者,如果我传递color =&#34; lavendar&#34;的参数,那么类名将变为:&#34; servive-block-lavendar&#34;。

这甚至可能吗?

如果是这样..有人可以帮助我使用的代码..因为我在查看页面时收到了WordPress的数百个错误。

基本上错误是这些错误的重复(我认为这可能是因为我试图在类名中放入参数时出现语法错误 - 如下所示:servive-block-'.$color.'

  

警告:preg_split():未知的修饰符&#39; b&#39;在第244行的C:\ xampp \ htdocs \ CIRB \ CirbWP \ wp-includes \ formatting.php

     

警告:在第246行的C:\ xampp \ htdocs \ CIRB \ CirbWP \ wp-includes \ formatting.php中为foreach()提供的参数无效

     

警告:implode():在第297行的C:\ xampp \ htdocs \ CIRB \ CirbWP \ wp-includes \ formatting.php中传递的参数无效

感谢任何指导!

3 个答案:

答案 0 :(得分:1)

我认为你的问题就在这一行:

add_shortcode('/box', 'colored_box_end');

此警告:

  

preg_split():未知的修饰符'b'

可能是你的'/box'参数的结果,假设WordPress使用正则表达式来解析它(文档没有说明这一点,我没有查看代码)。您不需要显式添加结束标记,只需使用add_shortcode('box', 'colored_box_shortcode');并将所有内容放在一个函数中而不是两个函数中。

function colored_box_shortcode( $atts, $content = "" ) {
   extract(shortcode_atts(array(
      'color' => grey,
   ), $atts));
  return '<div class="shadow-wrapper half-shadow im-centered">
  <div class="box-shadow shadow-effect-2">
  <div class="servive-block servive-block-'.$color.'">' . $content '</div>
    </div>
    </div>';
}
add_shortcode('box', 'colored_box_shortcode');

答案 1 :(得分:0)

使用$ content输出短代码内的内容:

add_shortcode("box", function ($atts, $content = "") {

    $atts = shortcode_atts(array(
        "color" => "grey",
    ), $atts);

    ?>
        <div class="shadow-wrapper half-shadow im-centered">
        <div class="box-shadow shadow-effect-2">
        <div class="servive-block servive-block-<?php echo $atts["color"];?>">
            <?php echo do_shortcode($content);?>
        </div>
        </div>
        </div>
    <?php

});

答案 2 :(得分:0)

请修改您的短代码:[/ box]至 [end-box]

[box color="bluemed"]
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nec nulla vitae lacus.
[end-box]

试试这个: 我将[/ box]替换为 [end-box] ,并将灰色替换为&#39; grey&#39;

function colored_box_shortcode($atts) {

   extract(shortcode_atts(array(
      'color' => 'grey',
   ), $atts));
  return '<div class="shadow-wrapper half-shadow im-centered"><div class="box-shadow shadow-effect-2">
  <div class="servive-block servive-block-'.$color.'">';
}

add_shortcode('box', 'colored_box_shortcode');

function colored_box_end() {
    return '</div>
    </div>
    </div>';
}

add_shortcode('end-box', 'colored_box_end');