What does this shortcode do?

时间:2019-09-30 作者:JovanJuniorDev

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

    extract(shortcode_atts(array("type" => "warrning"), $atts));
    return ".$content.";
}
add_shortcode("warrning_dialog", "my_shortcode");
我知道它会创建短代码[warning\\u dialog],但我不理解的是extract()函数和返回“..$content”

1 个回复
SO网友:Tom J Nowell

老实说,这没什么用。如果代码如您所描述的那样,那么它所做的就是在内容的任一侧添加句号。如果不是这样,那么可能会丢失代码。

其他部分:

什么是extract?

extract 是许多旧的WP代码示例中使用的PHP函数,这是一种非常糟糕的做法。它接受数组中的键和值,并将它们转换为变量。

问题是,您不知道数组中有什么以及它将创建什么变量。extract 覆盖其他变量可能会导致问题。编辑器和工具在使用extract, 并将生成错误警告。

extract 还鼓励编写糟糕的代码。通过依赖以这种方式创建的变量,如果这些值从一开始就不在数组中,就会遇到问题,从而生成通知。始终避免extract, 作者使用它是一个错误。这不是好的做法。

在您问题中的示例中extract 甚至不使用调用,结果可以简化为:

function my_shortcode($atts, $content = \'\'){
    return ".$content.";
}
add_shortcode("warrning_dialog", "my_shortcode");

怎么样shortcode_atts?

extract 需要一个键和值的数组,它将转换为变量和值,那么这个数组来自哪里呢?

它来自$atts 传递给短代码的属性,例如。[shortcode att1="value" another_attribute="anothervalue"]content[/shortcode]

但是如果用户没有指定我们需要的属性呢?好shortcode_atts 让我们获取属性列表,并添加缺少的默认值。这样他们就一直在那里:

shortcode_atts(array("type" => "warrning"), $atts)
最好写为:

$atts = shortcode_atts( [
    \'type\' => \'warrning\'
], $atts);
如果需要访问属性类型,可以使用$atts[\'type\']

那怎么办".$content."?

这只是一个嵌入了变量的字符串。例如:

$name = \'Tom\';
echo "My name is $name";
上述代码将输出:

我叫汤姆

这也是一种将安全问题引入站点的好方法。这是因为这种方式不可能延迟逃跑/消毒。请始终使用串联。

".$content." 与相同\'.\'.$content.\'.\'

相关推荐

Shortcode to show the code

如何创建一个短代码(或类似的代码)来在页面的某个地方显示页脚?我试过了,但没有结果。。。function show_footer() { return get_footer(); } add_shortcode( \'show_f\', \'show_footer\' ); 或者这个。。。function show_footer() { get_footer(); } add_shortcode( \'show_f\', \'sho