Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过wordpress shortcode传递最终成为类名一部分的参数_Php_Wordpress_Parameter Passing_Shortcode - Fatal编程技术网

Php 如何通过wordpress shortcode传递最终成为类名一部分的参数

Php 如何通过wordpress shortcode传递最终成为类名一部分的参数,php,wordpress,parameter-passing,shortcode,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 s

这是我想用一个短代码生成的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>
正在传递的参数:color=“bluemed”需要成为div类的一部分。。如:
(请参见上面生成的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');
功能彩色方框快捷码($atts){
提取(短码)附件(数组)(
“颜色”=>灰色,
)美元(附件);;
返回'
';
}
添加_短码('box','colored_box_短码');
函数彩色_框_结束(){
返回'
';
}
添加快捷码('/box',彩色方框'u end');
正如您所看到的,我将颜色属性default content设置为灰色,但也允许在从快捷码传递的参数中超越并指定颜色

然后,该颜色需要成为div内部类名的一部分。因此,如果未传递任何参数,则类名将变为:“servive block GRY”。或者,如果我传递color=“lavendar”参数,则类名将变为:“servive block lavendar”

这可能吗

如果是的话。。有人能帮我修改一下我正在使用的代码吗。。因为当我查看页面时,WordPress会出现数百个错误

基本上,这些错误是这3个错误的重复(我认为这可能是由于我试图将参数放入类名中时出现语法错误造成的,如:
servive block-'.$color.

警告:preg_split():第244行C:\xampp\htdocs\CIRB\CirbWP\wp includes\formatting.php中的未知修饰符“b”

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

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


谢谢你的指导

使用$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

});
add_短码(“box”,函数($atts,$content=”“){
$atts=短码_atts(数组)(
“颜色”=>“灰色”,
)(港币),;
?>

我认为你的问题在于:

add_shortcode('/box', 'colored_box_end');
此警告:

preg_split():未知修饰符“b”

可能是您的
'/box'
参数的结果,假设WordPress使用正则表达式来解析(文档中没有说明这一点,我也没有查看代码)。您不需要显式添加结束标记,只需使用
add\u shortcode('box','colored\u box\u 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');
function-colored\u-box\u-shortcode($atts,$content=”“){
提取(短码)附件(数组)(
“颜色”=>灰色,
)美元(附件);;
返回'
“.$content”
';
}
添加_短码('box','colored_box_短码');

请将您的快捷码:[/box]修改为[end box]

[box color="bluemed"]
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nec nulla vitae lacus.
[end-box]
试试这个: 我将[/box]替换为[end box],并将灰色替换为“灰色”

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');
功能彩色方框快捷码($atts){
提取(短码)附件(数组)(
“颜色”=>“灰色”,
)美元(附件);;
返回'
';
}
添加_短码('box','colored_box_短码');
函数彩色_框_结束(){
返回'
';
}
添加快捷码(“结束框”、“彩色结束框”);

完美……正是我需要的。ThxI不能把它全部放在一个短代码中。我需要第一个用类创建div,然后客户端可以在中间添加内容,然后用关闭div执行结束短代码。我用@ GeraldSchneider的例子来更改“结束”短代码的名称。你可能是对的。但是更多的信息会有帮助。我尝试了你的建议,当我在页面编辑器中输入短代码,然后在短代码之后添加我想要的内容时,在查看页面时,内容最终显示在短代码的最后一个结束div之外。我不知道如何放置短代码进入编辑器,允许用户编辑内容,并且在内容之后仍然显示结尾div,而无需像我在自己的回答中建议的那样分两步进行。我在Google中查找了它,但不知道如何实现它。现在我终于明白了……这是我尝试的正确且简洁的方法最初使用两步短代码时,您需要在页面编辑器中输入[box]客户端可以编辑的内容放在这里[/box]。我没有意识到您需要自己在编辑器中手动输入结束标记,因此我无法让您的解决方案开始工作。谢谢。好主意。但我需要创建周围的div(通过短代码保持编码简单),这允许客户端在两者之间编写他们想要的任何内容。我不会为他们提供内容。若要将其他短代码应用于内容,请使用
echo do\u短代码($content)
-我编辑我的代码
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');