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