Remove extract from function

时间:2020-08-04 作者:JoaMika

我使用此代码以便用户可以输入[photo no="1"], [photo no="2"], [photo no="3"] 等在他们的岗位上。但是我听说extract 是一个不安全的函数。如何修改此代码以删除extract?

   function photo_shortcode($atts){
       extract(shortcode_atts(array(
          \'no\' => 1,
       ), $atts));
    
       $no     = is_numeric($no) ? (int) $no : 1;
       $images = get_field(\'fl_gallery\');
    
      if ( !empty( $images ) ) {
       $image  = $images[$no];
       return \' $image[\'url\'] \' ;
      }
    }

2 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

很简单:只需指定shortcode_atts() (它是一个数组)访问变量,并使用它访问快捷码属性,访问方式与访问任何其他数组中的项的方式相同:

$atts = shortcode_atts( array(
    \'no\' => 1,
), $atts );

// Use $atts[\'no\'] to get the value of the "no" attribute.
$no = is_numeric( $atts[\'no\'] ) ? (int) $atts[\'no\'] : 1;

SO网友:mozboz

extract 将数组中的变量引入局部变量。在你的例子中,它唯一的变量是$no, 因此,您可以使用以下代码替换extract,这将执行相同的操作:

替换:

extract(shortcode_atts(array(
          \'no\' => 1,
       ), $atts));
使用:

$arr = shortcode_atts(array(
          \'no\' => 1,
       ), $atts);

$no = $arr[\'no\'];

相关推荐

在PHP中删除ECHO输出中的重复项

现在,下面的函数输出产品的所有变体图像。E、 g.3倍蓝色(S、M、L号),3倍红色(S、M、L号)我想下面的功能只输出唯一的彩色图像。E、 g.1个蓝色,1个红色尝试在回显字符串中使用array\\u unique,但无法使其正常工作。谢谢你的帮助。function loop_display_variation_attribute_and_thumbnail() { global $product; if( $product->is_type(\'variable\