带有PHP问题的快捷代码“未定义的索引”

时间:2020-02-11 作者:Mathieu Préaud

我正在创建一个短代码来显示不同大小的图像:大、小和常规。用户可以选择设置large="true"small="true" 在编写短代码以输出正确的图像代码时。

当短代码处于活动状态时,我在前端遇到了一个PHP问题,下面的消息是large 和/或small 未设置为true或false:

注意:未定义索引:大in/wp-content/themes/mysite/functions。php在线1449

注意:未定义的索引:在/wp content/themes/mysite/functions中较大。php在线1451

第1449行为if( $atts[\'large\'] == true ) 1451号线是if( $atts[\'small\'] == true )

以下是短代码的PHP代码:

add_shortcode ("img", "img_output");
function img_output($atts, $content="null") {
    extract( shortcode_atts( array(
            \'large\' => false,
            \'small\' => false,
            \'url\' => \'\'
    ), $atts ));
    if( $atts[\'large\'] == true ) {
        return \'<img src="\' . $url . \'" class="img-large" width="100%" height="auto" />\';
    } else if( $atts[\'small\'] == true  ) {
        return \'<img src="\' . $url . \'" class="img-small" width="100%" height="auto" />\';
    } else {
        return \'<img src="\' . $url . \'" class="img-regular" width="100%" height="auto" />\';
    }
}
任何帮助都将不胜感激,谢谢!

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

因为如果用户输入large="true", 然后$atts[\'small\'] 未定义。通常的解决方案是使用shortcode_atts() 设置参数的默认值,但您不会将shortcode_atts() 进入$atts, 你只是在提取它。这意味着$small 将定义,但$atts[\'small\'] 不会的。

解决这个问题的正确方法是shortcode_atts() 转换为变量:

$atts = shortcode_atts( array(
        \'large\' => false,
        \'small\' => false,
        \'url\' => \'\'
), $atts );
另一方面,它有一个size="" 属性,带有smalllarge 尽可能多的值,而不是每个大小的单独属性,可能更容易管理。

相关推荐

创建自定义元框在WordPress中抛出PHP警告错误

我试图在我的WordPress测试网站中创建一个元框作为插件。我正在使用Udemy的一个教程中安装的自定义主题,该教程名为“WooCommerce&;WordPress电子商务开发”;“店面”。我已经复制了父主题,并按照教程说明创建了子主题。我没有按照教程中的指导实现“高级自定义字段”插件,而是决定创建自己的自定义插件来创建元框。我在wp内容/插件中添加了一个文件夹(简单主页字段),插件文件作为简单主页字段。php我已激活插件,并具有以下代码:function add_homepage_meta_b