Использование do_shortcode с переменными в WordPress
Не могу правильно сформировать PHP-код для вставки шорткода с использованием переменных из плагина Advanced Custom Fields. Кажется, я перепробовал все возможные комбинации с ., ' и ". После изучения всех доступных материалов проблема остаётся нерешённой.
<?php
$address = get_field('cong_streetaddress');
$city = get_field('cong_city');
$province = get_field('cong_province');
$postalcode = get_field('cong_postalcode');
echo do_shortcode('[pw_map address="'" . $address . " . " . $city . " . " . $province . " . " . $postalcode . "'" width="100%" height="200px"]');
?>
Если использовать только одну переменную, например так: echo do_shortcode('[pw_map address="'. $postalcode . '" width="100%" height="200px"]');
, то всё работает корректно.

У вас синтаксическая ошибка, кавычки не совпадают. Попробуйте отделить данные от шаблона шорткода и используйте sprintf()
:
$shortcode = sprintf(
'[pw_map address="%1$s %2$s %3$s %4$s" width="%5$s" height="200px"]',
$address,
$city,
$province,
$postalcode,
'100%'
);
echo do_shortcode( $shortcode );
Так гораздо удобнее читать, и сложнее допустить синтаксические ошибки. :)

Кажется, ничего не возвращается (думаю, потому что нет значений для этих переменных). Я отредактировал вот так: `<?php
$address = get_field('cong_streetaddress');
$city = get_field('cong_city');
$province = get_field('cong_province');
$postalcode = get_field('cong_postalcode');
$shortcode = sprintf(
'[pw_map address="%1$s %2$s %3$s %4$s" width="100%" height="200px"]',
$address,
$city,
$province,
$postalcode
);
echo do_shortcode( $shortcode );
?>`, но это тоже не сработало.

@JimKite Символ %
в 100%
мог запутать sprintf()
. Попробуй изменённый код сейчас.

Изменение знака процента, насколько я вижу, не дало никакого эффекта. По-прежнему ничего не возвращается на страницу. Правильно ли я сделал, объявив переменные перед этим кодом?

Возможно, значения полей пустые или нет корректных данных адреса? Выведи их, чтобы проверить.

Выполнение print_r ($address);
прямо перед echo do_shortcode
отобразило адрес.

Это была моя глупость. Ваш код работал идеально. Я не проверил, что почтовый индекс, введенный в тестовом посте, был правильным, и, должно быть, это вызвало конфликт с адресом, поэтому карта вообще не возвращалась. Большое спасибо за помощь и извините за ошибку.
