Проблема с коротким кодом с двумя значениями из массива атрибутов

У меня проблема с моим шорткодом, который я создал для работы в среде 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 ответ

Решение

Ваш код попадает в первое условие. Измените логику, чтобы выполнить сначала 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>';
}
Другие вопросы по тегам