仅为第一个选项将ID添加到输出

时间:2017-11-09 作者:JoaMika

我希望向输出中添加一个额外的ID:<div id="NEWID" class="kalec"> 如果使用值调用快捷码no=0 i、 e。[photo no="0"]

我需要在输出中使用IF语句,但无法找出正确的语法。

  function photo_shortcode($atts){
       extract(shortcode_atts(array(
          \'no\' => 1,
       ), $atts));

       $no     = ( $no       != \'\'     ) ? $no : 1;
       $images = get_field(\'fl_gallery\');
       $image  = $images[$no];

    if ($image) {
       $credit = get_field(\'fl_credit\', $image[\'id\']);
       return \'<div class="kalim"><img title="\' . esc_attr( sprintf( the_title_attribute( \'echo=0\' ) ) ) . \'" alt="\' . esc_attr( sprintf( the_title_attribute( \'echo=0\' ) ) ) . \'" src="\' . $image[\'url\'] . \'" />\' . (!empty($credit) ? \'<div [INSERT IF STATEMENT] class="kalec"><div class="kalca">\' . $image[\'caption\'] . \'</div><div class="kalcr">Credit:\' . $credit . \'</div></div>\': \'\' ) . \'</div>\' ;
     }

    }

2 个回复
SO网友:jaswrks

而不是使用if 检查,使用filter_var() 这样就可以在shortcode属性中传递任何布尔值;e、 g.、是、否、开、关、真、假、0、1。

$no = filter_var( $no, FILTER_VALIDATE_BOOLEAN );
现在,$no 要么是truefalse (布尔)。

对不起,我明白了$no 实际上是一个数字。我的错误。

if ( $no === \'0\' ) {
    $no = 0;
} else {
    $no = (int) $no;
}
使用strict comparison ===

SO网友:M-R

我相信,您的代码缺少多次检查。我正在尝试覆盖其中一些。例如

  1. $no 未检查数值$image[$no] 应在访问之前验证是否存在
这是固定的代码(1)、(2)和(3)。

function photo_shortcode($atts){
    extract(shortcode_atts(array(
      \'no\' => 1,
    ), $atts));

    $no     = is_numeric($no) ? (int) $no : 1;
    $images = get_field(\'fl_gallery\');

    if (isset($image[$no])) {
        $image  = $images[$no];
        $credit = get_field(\'fl_credit\', $image[\'id\']);

        ob_start();
        echo \'<div class="kalim">\';
        echo \'<img title="\' . esc_attr( sprintf( the_title_attribute( \'echo=0\' ) ) ) . \'" alt="\' . esc_attr( sprintf( the_title_attribute( \'echo=0\' ) ) ) . \'" src="\' . $image[\'url\'] . \'" />\';

        if(!empty($credit) ) {

            $id = ($no == 0) ? \'id="NEWID"\': \'\';

            echo \'<div \'.$id.\' class="kalec"><div class="kalca">\' . $image[\'caption\'] . 
                \'</div><div class="kalcr">Credit:\' . $credit . \'</div></div>\';
        }

        echo \'</div>\' ;

        return ob_get_clean();
    }
    return \'\';
}

结束