Почему php делит атрибут data-img на два?

Ссылка скопирована
1 ответ
<div class="block-services__items">                 <?php foreach ($services as $service) : ?>                     <a data-img="<?= $service['img']['url'] ?>" href="<?= $service['link'] ?>" class="block-services__item">                     </a>                 <?php endforeach; ?>             </div>

<div class="block-services__items"> <?php foreach ($services as $service) : ?> <a data-img="<?= $service['img']['url'] ?>" href="<?= $service['link'] ?>" class="block-services__item"> </a> <?php endforeach; ?> </div>

в DOM рендерится так

<a href="/metalloizdeliya-na-zakaz" class="block-services__item" data="-" img="/app/webp-express/webp-images/uploads/2022/12/cbbd0394d5c036d699faccbc018cc7d9.jpg.webp">

<a href="/metalloizdeliya-na-zakaz" class="block-services__item" data="-" img="/app/webp-express/webp-images/uploads/2022/12/cbbd0394d5c036d699faccbc018cc7d9.jpg.webp">

Дополнительно:

php тут не при чем, копайте дальше

  • Этот код нарушает стандарты кодирования ВП
  • Ответы:

    Не делит.
    https://ideone.com/Ga1OM2

    • у меня этот сайт не работает ни с какого устройства
    • Дмитрий, а через vpn?
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Павел Админов Ответ

    PHP не делит data-img на два атрибута. Так происходит из-за неверно сформированного HTML. В вашем примере внутри атрибута есть лишние пробелы после открывающей кавычки и, возможно, значение выводится неэкранированным. Браузер пытается починить разметку и в итоге видит отдельные атрибуты data и img.

    Пишите атрибут без пробелов между именем и значением, и обязательно используйте esc_url() / esc_attr():

    <div class="block-services__items">
    <?php foreach ($services as $service) : ?>
        <a
            data-img="<?php echo esc_url($service['img']['url'] ?? ''); ?>"
            href="<?php echo esc_url($service['link'] ?? '#'); ?>"
            class="block-services__item">
        </a>
    <?php endforeach; ?>
    </div>

    <div class="block-services__items"> <?php foreach ($services as $service) : ?> <a data-img="<?php echo esc_url($service['img']['url'] ?? ''); ?>" href="<?php echo esc_url($service['link'] ?? '#'); ?>" class="block-services__item"> </a> <?php endforeach; ?> </div>

    Если пишете короткий echo-синтаксис, тоже нормально:

    <a data-img="<?= esc_url($service['img']['url'] ?? '') ?>" href="<?= esc_url($service['link'] ?? '#') ?>" class="block-services__item"></a>

    <a data-img="<?= esc_url($service['img']['url'] ?? '') ?>" href="<?= esc_url($service['link'] ?? '#') ?>" class="block-services__item"></a>

    Проверьте исходный HTML через «Просмотр кода страницы», а не только DOM в инспекторе. DOM уже показывает то, как браузер исправил битую разметку. Если в исходнике атрибут выглядит нормально, тогда ищите JS, который изменяет элемент после загрузки. Но по описанию это именно проблема HTML-вывода.

    Также проверьте, что в URL картинки нет кавычек или других символов, которые могут закрыть атрибут раньше времени. Если значение приходит из ACF, Carbon Fields или массива темы, оно всё равно должно проходить через esc_url(). Для произвольных data-атрибутов с текстом используйте esc_attr(), а для ссылок и изображений — esc_url().

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно