Вопрос или проблема
Я пытаюсь создать функцию, которая будет выдавать разные URL изображений в зависимости от последней цифры bbp_get_topic_id()
.
Вот что у меня есть на данный момент:
function bg_image_topic_titlearea() {
$letztezifferimgs = substr("'.bbp_get_topic_id().'", -1);
switch ($letztezifferimgs) {
case "0":
echo "https://test.bewusstewelt.de/wp-content/uploads/2016/10/Blockaden-lösen-2.jpg";
break;
case "1":
echo "https://test.bewusstewelt.de/wp-content/uploads/2016/09/Das-Leben-ist-ein-Spiel-2.jpg";
break;
case "2":
echo "https://test.bewusstewelt.de/wp-content/uploads/2017/02/Bedürfnisse-erkennen-3.jpg";
break;
case "3":
echo "https://test.bewusstewelt.de/wp-content/uploads/2016/08/Selbsterkenntnis-sich-selbst-finden2-1.jpg";
break;
case "4":
echo "https://test.bewusstewelt.de/wp-content/uploads/2016/11/Reinkarnation-Wiedergeburt-2.jpg";
break;
case "5":
echo "https://test.bewusstewelt.de/wp-content/uploads/2016/10/Intuition3.jpg";
break;
case "6":
echo "https://test.bewusstewelt.de/wp-content/uploads/2016/07/Manchmal-muss-man-loslassen-3.jpg";
break;
case "7":
echo "https://test.bewusstewelt.de/wp-content/uploads/2016/07/Manchmal-muss-man-loslassen-3.jpg";
break;
case "8":
echo "https://test.bewusstewelt.de/wp-content/uploads/2017/02/Pfad.jpg";
break;
case "9":
echo "https://test.bewusstewelt.de/wp-content/uploads/2017/01/Zirbeldrüse-aktivieren-2.jpg";
break;
}
}
Но он не реагирует, если я использую .bg_image_topic_titlearea().
для получения URL изображения.
Я пытаюсь сделать это уже некоторое время и был бы рад, если бы кто-то мог мне помочь.
С наилучшими пожеланиями
Доминик
Я попробовал бы что-то вроде этого:
function bg_image_topic_titlearea() {
if ( ! function_exists( 'bbp_get_topic_id' ) ) {
return false;
}
if ( ! $letztezifferimgs = bbp_get_topic_id() ) {
return false;
}
$letztezifferimgs = substr( $letztezifferimgs, - 1 );
// switch ...
return true;
}
Я бы рекомендовал проверить, существует ли вызов функции (bbp_get_topic_id();
) для получения ID темы.
Я бы рекомендовал проверить, действительно ли получено значение от вызова функции для получения ID темы.
Не уверен, почему вам нужно использовать substr();
, но выполните это, когда вы будете уверены, что получили ID темы.
ЗАТЕМ выполните ваш switch
.
Я также рекомендую добавить “по умолчанию” в ваше выражение switch.
Пример “по умолчанию”:
default:
// сделать что-то...
break;
Не видя полный код, трудно изолировать его проблемы. Поэтому, пожалуйста, простите меня, если я неправильно понял.
Я просто добавлю к тому, что я предлагал в своих комментариях выше, что более типичная реализация короткого кода будет заключаться в том, чтобы 1) функция URL изображения возвращала, а не выводила свой результат, и 2) использовать простую строку в качестве атрибута короткого кода, а не функцию, возвращающую строку. Обычно функция или ее аргументы уже должны вернуть строку внутри функции короткого кода.
Что касается возврата по сравнению с echo, Кодекс утверждает:
Обратите внимание, что функция, вызываемая коротким кодом, никогда не должна производить
никакой вывод. Функции короткого кода должны возвращать текст, который
будет использоваться для замены короткого кода. Прямое производство вывода
приведет к непредвиденным результатам. Это похоже на то, как должны вести себя функции фильтров, поскольку они не должны производить ожидаемые побочные эффекты от вызова, так как вы не можете контролировать, когда и откуда они вызываются.
В кратце, выглядит так, будто вы пытаетесь вернуть echo или, возможно, echo echo. (Я также добавлю, что, по крайней мере, до сегодняшнего дня, когда я сделал ту же ошибку несколько раз, использование echo или эквивалента — это ошибка, которую я делаю или делал часто – иногда вы можете с этим справиться, а иногда это приводит к непредвиденным или просто плохим результатам.)
Что касается второй части, включение функции в качестве атрибута при размещении короткого кода, где бы он ни был, я никогда не пытался и не думаю, что когда-либо сталкивался с этим, хотя трудно быть уверенным, что вы делаете или тестировать это, основываясь на том, что представлено в вопросе. В любом случае .bg_image_topic_titlearea().
похоже на намерение, опять же, вернуть, а не echo строку в более длинном выражении – т.е. echo 'Вот URL изображения: ' . bg_image_topic_titlearea() . 'Как вам это?';
Для этого вам нужно, чтобы значение возвращалось, а не чтобы оно выводилось.
Ответ или решение
Чтобы динамически изменять изображение в зависимости от последней цифры ID темы в WordPress, вы можете использовать функцию с конструкцией switch
. Давайте обсудим, как это правильно сделать с точки зрения программирования, а также выделим ключевые пункты для реализации.
Постановка задачи
Вам нужно создать функцию, которая будет возвращать URL изображения в зависимости от последней цифры, полученной из результата функции bbp_get_topic_id()
. Это может быть использовано для динамического отображения различных изображений на вашем сайте, в зависимости от контента.
Решение
Вот улучшенная версия вашей функции, которая учитывает замечания, а также реализует полную логику:
function bg_image_topic_titlearea() {
// Проверка на наличие функции bbp_get_topic_id
if (!function_exists('bbp_get_topic_id')) {
return false; // Возвращаем false, если функция отсутствует
}
// Получаем ID темы
$topic_id = bbp_get_topic_id();
// Проверяем, что мы получили действительный ID
if (!$topic_id) {
return false; // Возвращаем false, если ID темы не получен
}
// Извлекаем последнюю цифру ID
$last_digit = substr((string)$topic_id, -1);
// Инициализируем переменную для URL изображения
$image_url = '';
// Используем конструкцию switch для выбора изображения
switch ($last_digit) {
case "0":
$image_url = "https://test.bewusstewelt.de/wp-content/uploads/2016/10/Blockaden-lösen-2.jpg";
break;
case "1":
$image_url = "https://test.bewusstewelt.de/wp-content/uploads/2016/09/Das-Leben-ist-ein-Spiel-2.jpg";
break;
case "2":
$image_url = "https://test.bewusstewelt.de/wp-content/uploads/2017/02/Bedürfnisse-erkennen-3.jpg";
break;
case "3":
$image_url = "https://test.bewusstewelt.de/wp-content/uploads/2016/08/Selbsterkenntnis-sich-selbst-finden2-1.jpg";
break;
case "4":
$image_url = "https://test.bewusstewelt.de/wp-content/uploads/2016/11/Reinkarnation-Wiedergeburt-2.jpg";
break;
case "5":
$image_url = "https://test.bewusstewelt.de/wp-content/uploads/2016/10/Intuition3.jpg";
break;
case "6":
$image_url = "https://test.bewusstewelt.de/wp-content/uploads/2016/07/Manchmal-muss-man-loslassen-3.jpg";
break;
case "7":
$image_url = "https://test.bewusstewelt.de/wp-content/uploads/2016/07/Manchmal-muss-man-loslassen-3.jpg";
break;
case "8":
$image_url = "https://test.bewusstewelt.de/wp-content/uploads/2017/02/Pfad.jpg";
break;
case "9":
$image_url = "https://test.bewusstewelt.de/wp-content/uploads/2017/01/Zirbeldrüse-aktivieren-2.jpg";
break;
default:
// Опционально, задаем изображение по умолчанию
$image_url = "https://test.bewusstewelt.de/wp-content/uploads/default-image.jpg";
break;
}
// Возвращаем URL изображения
return $image_url;
}
Объяснение кода
-
Проверка наличия функции: Прежде всего, мы проверяем, существует ли функция
bbp_get_topic_id()
для предотвращения ошибок. -
Получение Topic ID: Мы вызываем эту функцию и сохраняем результат в переменную.
-
Получение последней цифры: Используем
substr()
для извлечения последней цифры из строкового значения Topic ID. -
Конструкция switch: В этой конструкции происходит выбор изображения в зависимости от последней цифры. Для каждого случая мы устанавливаем соответствующий URL изображения.
-
Значение по умолчанию: Добавлен
default
случай вswitch
для обработки неопределенных ситуаций, когда последняя цифра не соответствует ожидаемым значениям. -
Возврат результата: Функция возвращает URL изображения, что более корректно с точки зрения логики использования в коде.
Итог
Теперь вы можете использовать эту функцию для динамической подмены изображений. Для отображения изображений в вашем шаблоне WordPress вы можете просто вызвать функцию:
echo '<img src="' . bg_image_topic_titlearea() . '" alt="Topic Image">';
Это обеспечит вам отображение нужного изображения в зависимости от ID темы, а также более безопасную и эффективную обработку данных.