Проблема с коротким кодом с двумя значениями из массива атрибутов - PullRequest
0 голосов
/ 29 ноября 2018

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

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