extract(shortcode_atts(array()是做什么的?


28

食典说

shortcode_atts()将用户简码属性与已知属性结合起来,并在需要时填写默认值。结果将包含已知属性中的每个键,并与shortcode属性中的值合并。

这对我来说没有多大意义(我是新手)。

这是一个例子:

function wps_trend($atts) {
extract( shortcode_atts( array(
'w' => '500', 
'h' => '330',
'q' => '',
'geo' => 'US',
), $atts));
$h = (int) $h;
$w = (int) $w;
$q = esc_attr($geo);
ob_start();  

请您解释一下

Answers:


35

shortcode_atts()类似于array_merge():将第二个参数列表合并到第一个参数列表中。区别在于:它仅合并第一个参数($default)中存在的键。

extract()然后使用数组键,将其设置为变量名,并将其值设置为变量值。'w' => '500'在您的示例中成为$w = '500'

不要使用extract()。这种非常糟糕的代码样式。即使在核心中,它的用法也弃用,这意味着... :)

您的示例应写为:

$args = shortcode_atts( 
    array(
        'w'   => '500',
        'h'   => '330',
        'q'   => '',
        'geo' => 'US',
    ), 
    $atts
);
$w = (int) $args['w'];
$h = (int) $args['h'];
$q = esc_attr( $args['q'] );

1
谢谢。我不了解extract,所以也谢谢!
mattnewbie

5
extract()WP编码标准也不鼓励这样做。见make.wordpress.org/core/handbook/best-practices/...
alexg

警告!不要在不可信的数据上使用extract(),例如用户输入。是不安全的,您可能会发生许多冲突,并且还会覆盖以前的某些代码。那只能在代码的某些真正,真正,受保护的部分中使用,您将在其中了解期望的内容和所需的内容。
Ivijan StefanStipić17年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.