Как удалить дублирование базового URL?

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

У меня проблема со ссылкой для загрузки, URL дублируется. Например, так http://localhost/test/files/http://localhost/test/files/2016/05/testonly.docx

То же самое на живом сайте: http://www.homecredit.ph/wp-content/uploads/home1/homecre1/public_html/files/News-26.jpg, URL испорчен

Как это исправить? Я не добавлял ничего в .htaccess

.htaccess:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /test/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /test/index.php [L]
</IfModule>

# END WordPress

Вот код для ссылки на загрузку:

functions.php

function upload_user_file($file = array()){
    require_once(ABSPATH . 'wp-admin/includes/admin.php');
      $file_return = wp_handle_upload($file, array('test_form' => false));
      if(isset($file_return['error']) || isset($file_return['upload_error_handler'])){
          return false;
      } else {
          $filename = $file_return['file'];
          $attachment = array(
              'post_mime_type' => $file_return['type'],
              'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)),
              'post_content' => '',
              'post_status' => 'inherit',
              'guid' => $file_return['url']
          );

          $attachment_id = wp_insert_attachment($attachment, $file_return['url']);

          require_once(ABSPATH . 'wp-admin/includes/file.php');
          $attachment_data = wp_generate_attachment_metadata($attachment_id, $filename);
          wp_update_attachment_metadata($attachment_id, $attachment_data);

          if(0 < intval($attachment_id)){
            return $attachment_id;
          }
      }
      return false;
}

Шаблон пользовательской страницы

echo '<td id="resumeFile'.$optionId.'"><a href="https://wordpress.stackexchange.com/questions/227257/. wp_upload_dir($record_s->attachment_resume_id) .">Скачать резюме</a></td>';

Я только что проверил ваш URL http://www.homecredit.ph/wp-content/uploads/home1/homecre1/public_html/files/News-26.jpg и код и заметил, что вы сохраняете изображение по пути http://www.homecredit.ph/files/News-26.jpg, но пытаетесь получить доступ из папки загрузок WordPress. /home1/homecre1/public_html/files/News-26.jpg – это путь, сохраненный в базе данных для вашего идентификатора вложения. /home1/homecre1/public_html/ – это ваш корневой каталог, где установлен WordPress. Поэтому лучше сохранить только имя файла в базе данных или удалить корневой путь из значения базы данных и присоединить его к URL сайта. Например:

$filePath = str_replace('/home1/homecre1/public_html', '', $record_s->attachment_resume_id);
echo '<td id="resumeFile'.$optionId.'"><a href="https://wordpress.stackexchange.com/questions/227257/. $filePath .">Скачать резюме</a></td>';

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

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

Вам необходимо устранить проблему с дублированием базового URL в ваших ссылках, которая возникает из-за неправильного формирования ссылок в коде WordPress. Давайте разберёмся, как это можно исправить.

Шаг 1: Понимание проблемы

Вы указали, что ссылки дублируются. Например, вы получаете URL вида:

http://localhost/test/files/http://localhost/test/files/2016/05/testonly.docx

или

http://www.homecredit.ph/wp-content/uploads/home1/homecre1/public_html/files/News-26.jpg

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

Шаг 2: Исправление кода для загрузки файла

Ваша функция загрузки файла сохранит полный URL (включая корневой путь). Необходимо сохранить только относительный путь к файлу или файл без полного пути. Внесите следующие изменения в вашу функцию upload_user_file:

function upload_user_file($file = array()){
    require_once(ABSPATH . 'wp-admin/includes/admin.php');
    $file_return = wp_handle_upload($file, array('test_form' => false));

    if (isset($file_return['error']) || isset($file_return['upload_error_handler'])) {
        return false;
    } else {
        $filename = $file_return['file'];
        $attachment = array(
            'post_mime_type' => $file_return['type'],
            'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)),
            'post_content' => '',
            'post_status' => 'inherit',
            'guid' => $file_return['url'] // Оставьте этот URL без изменений
        );

        $attachment_id = wp_insert_attachment($attachment, $file_return['url']);

        require_once(ABSPATH . 'wp-admin/includes/file.php');
        $attachment_data = wp_generate_attachment_metadata($attachment_id, $filename);
        wp_update_attachment_metadata($attachment_id, $attachment_data);

        return $attachment_id > 0 ? $attachment_id : false;
    }
}

Шаг 3: Исправление кода шаблона страницы

Теперь вам нужно изменить, как вы генерируете ссылки на этот файл в вашем шаблоне. Вместо жесткой привязки к пути, используйте функцию wp_upload_dir() для получения актуального пути:

$filePath = str_replace('/home1/homecre1/public_html', '', $record_s->attachment_resume_id);
echo '<td id="resumeFile' . $optionId . '"><a href="' . wp_upload_dir()['baseurl'] . $filePath . '">Download Resume</a></td>';

Заключение

Эти изменения позволят вам избежать дублирования базового URL и привести к правильному формированию ссылок на загруженные файлы. Убедитесь, что вы протестировали все изменения и проверьте, чтобы все ссылки были корректными.

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

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

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