Использование оператора switch для изменения изображения в зависимости от последней цифры идентификатора темы

Вопрос или проблема

Я пытаюсь создать функцию, которая будет выдавать разные 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;
}

Объяснение кода

  1. Проверка наличия функции: Прежде всего, мы проверяем, существует ли функция bbp_get_topic_id() для предотвращения ошибок.

  2. Получение Topic ID: Мы вызываем эту функцию и сохраняем результат в переменную.

  3. Получение последней цифры: Используем substr() для извлечения последней цифры из строкового значения Topic ID.

  4. Конструкция switch: В этой конструкции происходит выбор изображения в зависимости от последней цифры. Для каждого случая мы устанавливаем соответствующий URL изображения.

  5. Значение по умолчанию: Добавлен default случай в switch для обработки неопределенных ситуаций, когда последняя цифра не соответствует ожидаемым значениям.

  6. Возврат результата: Функция возвращает URL изображения, что более корректно с точки зрения логики использования в коде.

Итог

Теперь вы можете использовать эту функцию для динамической подмены изображений. Для отображения изображений в вашем шаблоне WordPress вы можете просто вызвать функцию:

echo '<img src="' . bg_image_topic_titlearea() . '" alt="Topic Image">';

Это обеспечит вам отображение нужного изображения в зависимости от ID темы, а также более безопасную и эффективную обработку данных.

Оцените материал
Добавить комментарий

Капча загружается...