Использование do_shortcode с переменными в WordPress

7 окт. 2012 г., 22:38:17
Просмотры: 14.4K
Голосов: 1

Не могу правильно сформировать 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"]');, то всё работает корректно.

2
Комментарии

Пожалуйста, добавьте функцию обратного вызова для этого шорткода в ваш вопрос. Так будет гораздо проще дать полезный ответ. И, кстати, добро пожаловать в WordPress Stack Exchange!

fuxia fuxia
7 окт. 2012 г. 22:59:11

Большое спасибо за приветствие и за помощь. Это действительно ценный ресурс - я впечатлен. Шорткод генерируется плагином под названием Simple Google Maps Short Code http://wordpress.org/extend/plugins/simple-google-maps-short-code/.

Jim Kite Jim Kite
7 окт. 2012 г. 23:04:05
Все ответы на вопрос 1
9

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

Так гораздо удобнее читать, и сложнее допустить синтаксические ошибки. :)

7 окт. 2012 г. 22:45:09
Комментарии

Кажется, ничего не возвращается (думаю, потому что нет значений для этих переменных). Я отредактировал вот так: `<?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 );

?>`, но это тоже не сработало.

Jim Kite Jim Kite
7 окт. 2012 г. 22:51:39

Упс. Как форматировать блоки кода в комментариях?

Jim Kite Jim Kite
7 окт. 2012 г. 22:52:54

Нельзя просто так взять и вставить код в комментарии

Tom J Nowell Tom J Nowell
7 окт. 2012 г. 22:54:16

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

fuxia fuxia
7 окт. 2012 г. 23:05:44

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

Jim Kite Jim Kite
7 окт. 2012 г. 23:50:41

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

fuxia fuxia
7 окт. 2012 г. 23:53:05

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

Jim Kite Jim Kite
8 окт. 2012 г. 00:25:33

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

Jim Kite Jim Kite
8 окт. 2012 г. 16:27:37

Рад, что вы разобрались. :) Нажмите на галочку (✔) слева, чтобы другие читатели знали, что это решает проблему.

fuxia fuxia
8 окт. 2012 г. 16:31:31
Показать остальные 4 комментариев