Вопрос или проблема
Я не уверен, есть ли простое решение моей проблемы. Требование выглядит простым, но я не могу найти ответ, даже после шести часов мучений.
Мне нужно передать переменную из функции PHP в шорткод, а этот шорткод должен передать эту переменную в другой шорткод. Шорткод-1 откроет всплывающее окно, а контент этого окна создается шорткодом-2, и содержимое должно изменяться в зависимости от переменной. Как я могу этого добиться?
Код в моем шаблоне..
<a href="#" class="open-popup-1" variable= <?php getid(); ?>"> <?php echo "Нажмите здесь"?> </a>
шорткод всплывающего окна:
[modifycontent id=$variable]
Моя функция шорткода
function modifycontent($atts = [], $content = null)
{
// делаем что-то с $content
$var = atts['id'];
$content = gettherightcontent($var);
return $content;
}
add_shortcode('mc', 'modifycontent');
Я попробовал так, я смог вызвать мой шорткод, но не смог передать переменную.
Я вижу несколько ошибок в вашем коде…
-
в html не было кавычек перед переменной
-
в php вы говорите, что вызываете шорткод [modifycontent], но по вашему php вам следовало использовать [mc].
Тем не менее, вот как бы я это сделал:
function modifycontent ($atts, $content = null ) {
$a = shortcode_atts(
array(
'id' => '1',
),
$atts );
return '<a href="#" class="open-popup-1" variable="'.$a['id'].'">Нажмите здесь</a>';
}
add_shortcode( 'mc-shortcode', 'modifycontent' );
это будет использовать шорткод [mc-shortcode] для возврата:
<a href="#" class="open-popup-1" variable="1">Нажмите здесь</a>
Если вы используете это для шорткода: [mc-shortcode id=’1′]
это вернет:
<a href="#" class="open-popup-1" variable="2">Нажмите здесь</a>
(Обратите внимание, что переменная изменяется)
Ответ или решение
Чтобы передать динамическую переменную из PHP функции в шорткод и затем использовать её в другом шорткоде, можно воспользоваться следующими шагами. Предположим, что у нас есть два шорткода: первый открывает всплывающее окно, а второй генерирует контент для этого окна на основе переданной переменной.
Шаг 1: Создание шорткода для всплывающего окна
Сначала мы создадим наш первый шорткод, который будет генерировать ссылку для открытия всплывающего окна. В данном случае он будет принимать параметр id
.
function open_popup_shortcode($atts) {
$a = shortcode_atts(array(
'id' => '1',
), $atts);
// Возвращаем HTML-код ссылки со встроенной переменной
return '<a href="#" class="open-popup-1" data-variable="' . esc_attr($a['id']) . '">Click here</a>';
}
add_shortcode('open_popup', 'open_popup_shortcode');
Шаг 2: Создание шорткода для генерации контента
Второй шорткод будет отвечать за создание контента для всплывающего окна. Он оформлен так, чтобы получать ID и генерировать нужный контент.
function modify_content_shortcode($atts, $content = null) {
$a = shortcode_atts(array(
'id' => '1',
), $atts);
// Получаем контент на основе переданного id
$content = get_the_right_content($a['id']);
return $content;
}
add_shortcode('modifycontent', 'modify_content_shortcode');
Шаг 3: Использование шорткодов
Теперь, в вашем шаблоне, вы можете использовать ваш шорткод для создания ссылки и передать переменную ID. Для открытия всплывающего окна со страничкой контента можете использовать следующий код:
echo do_shortcode('[open_popup id="2"]'); // Это создаст ссылку с ID = 2
Шаг 4: Использование JavaScript для открытия всплывающего окна
Для того чтобы ваше всплывающее окно отображалось, вам нужно написать небольшую часть JavaScript, которая будет обрабатывать клик по ссылке и вызывать необходимый контент через второй шорткод.
document.addEventListener('DOMContentLoaded', function() {
document.querySelectorAll('.open-popup-1').forEach(function(link) {
link.addEventListener('click', function(event) {
event.preventDefault();
var variable = this.getAttribute('data-variable');
// Получаем контент нашего второго шорткода
var content = '[modifycontent id="' + variable + '"]'; // Создаем шорткод
var popupContent = do_shortcode(content); // Вызываем контент шорткода и вставляем в всплывающее окно
// Здесь можно добавить код для отображения всплывающего окна и вставки контента
showPopup(popupContent);
});
});
});
Заключение
Таким образом, вы передали динамическую переменную из вашего PHP кода через шорткод, а затем использовали её в другом шорткоде для генерации контента. Убедитесь, что ваши функции правильно подключены в файле functions.php
вашей темы. Также помните, что для работы с всплывающими окнами вам может понадобиться дополнительный JavaScript для управления отображением окна.