Wordpress: вызов шорткода для значения в другом шорткоде - PullRequest
0 голосов
/ 20 февраля 2019

Я очень новичок в этом, поэтому, пожалуйста, будьте осторожны со мной, если это глупый вопрос.

Я создаю сайт с менеджером событий и размещаю гео мои плагины для WordPress.Я хочу, чтобы пользователь мог вводить свое местоположение автозаполнения (через GMW) и иметь календарь в EM, выводящий только события на определенном расстоянии от этого места.Я уже добрался (с ручным захватом) до точки, где у меня есть короткий код, который выплевывает координаты введенного местоположения.Полный шорткод календаря EM принимает атрибут с именем 'near', который принимает координаты и затем выводит нужный календарь.

Код на данный момент:

[fullcalendar near=[gmw_current_latlng] near_distance=20]

с [gmw_current_latlng] обычно возвращает lat и long, разделенные запятой.Как правило, ближайший родственник принимает, скажем, 50.111123, -45.234 и т. Д.

Моя проблема в том, что мне кажется, что я не могу получить то, что хочу, с помощью этого жесткого подхода.Опять же, я очень плохо знаком с программированием и не очень много знаю, но я работал над этой проблемой уже несколько недель и не нашел ответа.Я пробовал много разных маршрутов, но этот путь привел меня так близко к тому месту, где я хочу быть.

Разработчик GMW сказал об этой проблеме:

"Дело в том, что я даже не уверен, можете ли вы передать значение в шорткод, используя другой шорткод. Я никогда не пробовал это сам. Лучшим способом было бы использование фильтров и пользовательской функции для" инъекции ""Координаты прямо в функцию календаря."

Если он прав и это невозможно, я понятия не имею, как выполнить его второе предложение.Надеюсь, я смогу разобраться с этим, потому что, честно говоря, мой сайт зависит от того, работает ли он.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Конечно, вы можете передать шорткод в качестве атрибута другого шорткода.Единственная проблема в том, что атрибуты не проходят [или].Поэтому вы должны заменить эти скобки на их html-записи.

Заменить [ на [ и ] на ], и все будет в порядке.Вот пример.

function foo_shortcode( $atts ) {

    $a = shortcode_atts( array(
        'foo' => "Something",
        'bar' => '',
    ), $atts );

    $barContent = html_entity_decode( $atts['bar'] );
    $barShortCodeOutput = do_shortcode($barContent);

    return sprintf("Foo = %s and bar = %s", $a['foo'], $barShortCodeOutput);
}
add_shortcode( 'foo', 'foo_shortcode' );


function bar_shortcode( $atts ) {
    return "Output from bar shortcode";
}
add_shortcode( 'bar', 'bar_shortcode' );

Затем поместите это в ваш редактор

[foo bar=[bar] ]

Смотрите, мы передаем шорткод [bar] как атрибут [foo].Таким образом, результат должен быть - Foo = Something and bar = Output from bar shortcode

Я знаю, это выглядит немного неприятно, но это поможет.

0 голосов
/ 20 февраля 2019

Как уже упоминалось @Jeppe, вы можете сделать Вложенные шорткоды :

[shortcode_1][shortcode_2][/shortcode_1]

Но парсер не любит значения шорткода как атрибуты в других шорткодах.

ЭтоПохоже, вы полагаетесь на несколько плагинов и их шорткоды, поэтому я не предлагаю редактировать эти шорткоды - но если вы посмотрите на Shortcode API , то добавить свой собственный довольно легко.Для простоты этот пример не будет содержать «правильных» методов проверки наличия шорткодов / установленных плагинов и т. Д., И будет просто предполагать, что они есть.

// Register a new shortcode called [calendar_with_latlng]
add_shortcode( 'calendar_with_latlng', 'calendar_with_latlng_function' );

// Create the function that handles that shortcode
function calendar_with_latlng_function( $atts ){
    // Handle default values and extract them to variables
    extract( shortcode_atts( array(
        'near_distance' => 20
    ), $atts, 'calendar_with_latlng' ) );

    // Get the current latlng from the gmw shortcode
    $gmw_current_latlng = do_shortcode( '[gmw_current_latlng]' );

    // Drop that value into the fullcalendar shortcode, and add the default (or passed) distance as well.
    return do_shortcode( '[fullcalendar near='. $gmw_current_latlng .' near_distance='. $near_distance .']' );
}

При условии [gmw_current_latlng] возвращает пригодный для использованияформат для вашего [fullcalendar] шорткода, теперь вы сможете использовать новый шорткод, который сочетает в себе два: [calendar_with_latlng] или вы также можете добавить атрибут near_distance: [calendar_with_latlng near_distance=44].

.необходимо поместить вышеуказанные функции в functions.php, создать простой плагин или сохранить их в файл и добавить его в каталог Must-Use Plugins .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...