Использование jQuery для вытягивания случайного изображения баннера в WordPress - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь использовать jQuery, чтобы на моей веб-странице отображались случайные изображения баннеров из выбранного пула в моем каталоге images/banners/.Из того, что у меня сейчас есть, скрипт не вытягивает ни одного изображения из возможных вариантов, а также почему-то перетаскивает мой нижний колонтитул в верхнюю часть страницы.Предполагается, что сценарий добавляет случайно выбранное изображение к #banner div и для этого также использует CSS.

Я пытался изменить пути к файлам и связываться с функцией appendTo и самим CSS.безрезультатно.Поскольку я использую этот сценарий в теме WordPress, код PHP с функцией get_template_directory_uri() необходим для правильного формирования пути к изображениям после загрузки темы.

Вот сценарий, который является правильнымсейчас:

    <script>
        var images = ['shelbysquare1.png', 'test1.png', 'test2.png', 'lake.jpg', 'fields.png'];
        $('<img src="<?php echo get_template_directory_uri(); ?>/images/banners/' + images[Math.floor(Math.random() * images.length)] + '">').appendTo('#banner');
    </script>

И вот идентификатор баннера в его текущем состоянии:

#banner {
   background-attachment: fixed;
   background-repeat: no-repeat;
   background-size: 100% 100%;
   background-position: top left;
   position: absolute;
   display: block;
   z-index: -2; }    

Умышленно z-index умышленно ниже, чтобы панель навигации была выше баннера, иположение установлено на абсолютное значение, чтобы оно всегда оставалось в верхнем левом углу страницы.Кроме того, тег <div id="banner"> для изображения находится внутри тега <body> и является первым div там даже над панелью навигации.Я также не получаю никаких ошибок из того, что могу сказать.

Я пока еще не эксперт в этих вопросах, поэтому любые советы или предлагаемые изменения будут с благодарностью приняты!

1 Ответ

0 голосов
/ 01 июля 2019

Ваш код должен работать, но есть несколько вещей, которые могут быть неправильными. Чтобы упростить отладку, вы можете изменить код следующим образом. И обратите внимание на то, что консоль выходит из системы.

<script>
var images = [ 'shelbysquare1.png', 'test1.png', 'test2.png', 'lake.jpg', 'fields.png' ],
    randomImage = images[ Math.floor( Math.random() * images.length ) ],
    themePath = '<?php echo get_template_directory_uri(); ?>',
    fullPath = themePath + '/images/banners/' + randomImage;

var $img = $('<img/>', {
    src: fullPath
});

$img.appendTo('#banner');

console.log($img);
</script>

С помощью error.logging (или используя точки останова в инструментах разработчика вашего браузера) вы можете проверить значение любой объявленной вами переменной.

В приведенном выше сценарии я выхожу из DOM-объекта, который мы только что создали. Если вы используете Chrome, ожидаемый вывод в вашей консоли должен выглядеть следующим образом:

a.fn.init [img, selector: "<img/>", context: {…}]
0: img
context: {src: "http://hostname.domain/wp- 
content/themes/themename/images/banners/test2.png"}
length: 1
selector: "<img/>"
__proto__: Object(0)

Убедитесь, что значение src правильно указывает на папку вашей темы. Как упомянуто TobiasM в комментариях, get_template_directory_uri () возвращает родительскую тему.

Если значение верное, но вы не видите изображения. Убедитесь, что при запуске скрипта доступен div с идентификатором #banner. Например, если вы запустите свой скрипт в head-теге, он запустится до того, как div окажется в DOM, поэтому при запуске .appendTo () цель не будет найдена.

Чтобы решить эту проблему, запустите Javascript после добавления DOM (непосредственно перед закрытием тега BODY) или добавьте следующий обратный вызов, который будет выполняться после загрузки всего содержимого DOM.

$(document).on('ready', function() {
    // code here
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...