NeXan87
@NeXan87
Фрилансер

Как вставить шорткод с условием в WordPress?

Здравствуйте. В PHP я нуб. Подскажите, пожалуйста, как вставить шорткод в Wordpress с условием так, чтобы ссылки, в зависимости от заполнения, отображались или нет.
Сам шорткод имеет вид:
[top number="1" header="Заголовок" map="Ссылка на карту" site="Ссылка на сайт"]

А возвращает он этот код (упростил все по максимуму):
<div>
   <div>1</div>
   <h2>Заголовок</h2>
   <a href="Ссылка на карту">Карта</a>
   <a href="Ссылка на сайт">Сайт</a>
Здесь контент из редактора
</div>

Сама функция PHP имеет такой вид:
function top_external( $atts, $shortcode_content = null ) {
	$params = shortcode_atts( array(
		'number' => '1',
		'header' => 'Заголовок',
		'map' => 'Карта',
		'site' => 'Сайт',
	), $atts );
	return "<div><div>{$params['number']}</div><h2>{$params['header']}</h2><a href='{$params['map']}''>Карта</a><a href='{$params['site']}'>Сайт</a>" . do_shortcode($shortcode_content) . "</div>";
}
add_shortcode( 'top', 'top_external' );

Как сделать, чтобы ссылки с картой и сайтом отображались только при заполненных полях в шорткоде map="" site=""? Спасибо.
  • Вопрос задан
  • 166 просмотров
Пригласить эксперта
Ответы на вопрос 2
Kozack
@Kozack Куратор тега WordPress
Thinking about a11y
return <условие>
    ? "<div><div>{$params['number']}</div><h2>{$params['header']}</h2><a href='{$params['map']}''>Карта</a><a href='{$params['site']}'>Сайт</a>" . do_shortcode($shortcode_content) . "</div>";
    : '';

https://www.php.net/manual/ru/language.operators.c...

Например
return $post_id === 13
    ? "<div><div>{$params['number']}</div><h2>{$params['header']}</h2><a href='{$params['map']}''>Карта</a><a href='{$params['site']}'>Сайт</a>" . do_shortcode($shortcode_content) . "</div>";
    : '';
Ответ написан
Комментировать
@Hormet
function top_external( $atts, $shortcode_content = null ) {
    $params = shortcode_atts( array(
        'number' => '1',
        'header' => 'Заголовок',
        'map' => '',
        'site' => '',
    ), $atts );

    $html = "<div><div>$params['number']</div><h2>$params['header']</h2>";
    $html .= $params['map'] ? "<a href=\"$params['map']\">Карта</a>" : ''; // если значение пустое, то не добавляем в вывод html
    // или можно написать так
    if ( $params['site'] ) {
        $html .= "<a href=\"$params['site']\">Сайт</a>";
    }
    $html .= do_shortcode( $shortcode_content ) . '</div>';
    return $html;
}
add_shortcode( 'top', 'top_external' );
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы