Гиперссылки перестали правильно отображаться из кода PHP для директории.

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

Следующий код всегда работал на нашем сайте, позволяя отображать слова, представляющие прикрепленные гиперссылки. Недавно на нашем сайте стали отображаться как слово, так и URL гиперссылки после него.

Например, слово “Resume” раньше отображалось как гиперссылка на файл “cv.value”. Теперь сайт показывает: Resume cv.value

Мы ничего не изменяли со своей стороны. Используем WP версии 6.7.2, Dynamic User Directory версии 2.1, Insert php code snippet версии 1.4.1

Хотелось бы знать, как отредактировать следующий php код, чтобы он снова работал.

PHP код:

”'<?php

// создаем указатель на файл, подключенный к потоку вывода
unlink('wp-content/uploads/TeachersDirectory.csv');
$csvoutput = fopen('wp-content/uploads/TeachersDirectory.csv', 'w');

// добавляем к SELECT при необходимости:
// , COALESCE(cv.value, '') AS 'Resume', COALESCE(imdb.value, '') AS 'IMDB'
$query = "SELECT users.display_name AS 'Name', users.user_email AS 'Email Address', COALESCE(phone.value, '') AS 'Phone' FROM  wp_3gwns004cx_users users LEFT JOIN (SELECT user_id, value FROM  wp_3gwns004cx_bp_xprofile_data WHERE field_id = 19) phone ON phone.user_id = users.id LEFT JOIN (SELECT user_id, CONCAT('https://www.theteachers.com/wp-content/uploads/', value) AS 'value' FROM  wp_3gwns004cx_bp_xprofile_data WHERE field_id = 3 AND value <> '') cv ON cv.user_id = users.id LEFT JOIN (SELECT user_id, value FROM  wp_3gwns004cx_bp_xprofile_data WHERE field_id = 5) imdb ON imdb.user_id = users.id LEFT JOIN  wp_3gwns004cx_usermeta usermeta ON users.id = usermeta.user_id LEFT JOIN (SELECT user_id, meta_value FROM  wp_3gwns004cx_usermeta WHERE meta_key = 'last_name') lnametable ON lnametable.user_id = users.id WHERE usermeta.meta_value="a:1:{s:10:\"subscriber\";b:1;}" GROUP BY users.display_name ORDER BY lnametable.meta_value ASC;";

// выводим заголовки колонок
//fputcsv($csvoutput, array('Name', 'Email Address', 'Phone', 'Resume', 'IMDB'));
fputcsv($csvoutput, array('Name', 'Email Address', 'Phone'));

// извлекаем данные
$db = mysqli_connect('f82444021589530.db.44021589.8dc.hostedresource.net', 'f82444021589530', 'R1*Ju!Og', 'f82444021589530', 3313);
$rows = mysqli_query($db, $query);

// проходим по строкам, выводя их
while ($row = mysqli_fetch_assoc($rows)) {
    fputcsv($csvoutput, $row);
}

// закрываем файл
fclose($csvoutput);

// выводим заголовки, чтобы скачать файл
    //header('Content-Type: text/csv; charset=utf-8');
   // header('Content-Disposition: attachment; filename=TeachersDirectory.csv');
// скачиваем файл
    //readfile("TeachersDirectory.csv");

?>”’

Ответ или решение

Конечно, давайте разберемся с вашей проблемой отображения гиперссылок. Вы указали, что недавние изменения привели к отображению не только текста ссылки, но и самого URL адреса рядом с текстом. Прежде чем перейти к решению, давайте разберем основные моменты и причины, которые могли повлиять на это поведение.

Теория

Гиперссылки формируются с помощью HTML-тега <a>, который имеет два основных атрибута: href и текстовое содержание внутри тега. Например:

<a href="path/to/file">Текст ссылки</a>

В вашем случае гиперссылка ранее правильно отображала текстовое содержание ("Resume"), ссылаясь на URL адрес файла (‘cv.value’). Но теперь отображается и сам URL адрес рядом с текстом ссылки, что указывает на проблему формирования данных на стороне сервера или обработку данных на клиентской стороне.

Возможные Причины

  • Изменение кода, управляющего формированием данных: Если ничего не изменялось вручную, можно предположить, что обновления плагинов или самой WordPress могли повлиять на интерпретацию или обработку данных из базы данных.

  • Влияние плагинов: Плагины, которые вы используете, такие как Dynamic User Directory или Insert PHP Code Snippet, могли быть обновлены либо изменили логику обработки. Это могло вызвать конфликт или изменение форматирования выводимых данных.

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

Пример

Давайте рассмотрим пример решения, основанный на предоставленном вами PHP коде. Проблема может заключаться в том, как ваш SQL-запрос извлекает данные, а также в том, как эти данные затем обрабатываются в PHP.

Ваша строка запроса:

// включение поля, возвращающего URL вместо текстового значения
LEFT JOIN (SELECT user_id, CONCAT('https://www.theteachers.com/wp-content/uploads/', value) AS 'value' FROM  wp_3gwns004cx_bp_xprofile_data WHERE field_id = 3 AND value <> '') cv ON cv.user_id = users.id

Возможно, при объединении данных через SQL запрос значение cv.value уже содержит текст, который отображается вместе с URL.

Также, убедитесь, что массив, который используется при создании CSV:

fputcsv($csvoutput, $row);

не передает ссылку во второй раз, добавляя ее в качестве отдельно стоящего текста. Это значит, что лучше проверить, как вы обрабатываете ваши результаты запроса $rows перед выводом.

Применение

  1. Проверьте структуру данных: Убедитесь, что поле cv.value в базе данных содержит именно URL, а не текстовый фрагмент с URL друг за другом.

  2. Логика обработки данных: Убедитесь, что при итерации по результатам запроса вы обрабатываете строки правильно. Используйте sprintf или другой метод, чтобы явно форматировать текст без включения URL:

    while ($row = mysqli_fetch_assoc($rows)) {
        // Предположим, 'Resume' - это колонка, где содержатся ваши URL
        $row['Resume'] = '<a href="' . $row['Resume'] . '">Resume</a>';
        fputcsv($csvoutput, $row);
    }
  3. Проверьте использование плагинов: Обратите внимание на их настройки, возможно, они содержат параметры, которые могут повлиять на форматирование ссылок.

  4. Отладка и настройка: Используйте функции echo или var_dump для диагностирования выходного результата, чтобы точно определить, где происходит "добавление" текста URL.

  5. Каналы обновлений и обратной связи: Если вы подозреваете, что основная причина в обновлениях плагинов, рассмотрите возможность обращения к разработчикам плагинов или проверку их документации на наличие изменений.

Заключение

Каждый из предложенных шагов позволяет локализовать проблему, выяснить основную причину и предоставить корректное решение. Надеюсь, это поможет вам найти решение и вернуть прежний функционал вашего сайта. Если проблема сохраняется, обратитесь к более подробной отладке или профессиональному разработчику для глубокого анализа кода и данных.

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

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