属性数组中有两个值的短代码问题

时间:2018-11-29 17:12:16

标签: php wordpress shortcode

我创建的要在wordpress环境中运行的简码有问题。

我不是使用简码的专家,这很重要:

add_shortcode('key_value' , 'key_value' );
function key_value( $atts, $content = null ) {
  $atts = shortcode_atts( array(
     'title' => '',
     'url'   => '',
  ), $atts );
  if ($atts['title']) {    
    $html = '<li><strong>'.$atts['title'].': </strong>'.$content.'</li>';
  } elseif ($atts['url'] && $atts['title']) {
    $html = '<li><a href="'.$atts['url'].'" target="_blank">'.$atts['title'].'</a></li>';
  }

  return $html;
}

我想返回第二个if语句,因为我有很多这样的短代码:

[key_value title="Delivery"]Fast[/key_value]
[key_value title="Duration"]2 weeks[/key_value]

它们工作正常,但是最后一个:

[key_value title="Info Session" url="/info/"][/key_value]

不起作用,我也不明白为什么,因为,如果我var_dump我的数组$ atts,我就能看到两个值。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您的代码已进入第一个条件。更改逻辑以首先执行else条件,或者换句话说,如果两个属性都使用它,否则仅检查标题:

if ($atts['url'] && $atts['title']) {
    $html = '<li><a href="'.$atts['url'].'" target="_blank">'.$atts['title'].'</a></li>';
} elseif ($atts['title']) {    
    $html = '<li><strong>'.$atts['title'].': </strong>'.$content.'</li>';
}