URL-чайники медиа без пути к папке загрузок

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

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

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

Пример:

http://example.com/courtcase/
будет страницей для судебного дела, а
http://example.com/courtcase/testimony.pdf будет документом, упомянутым в нем.

Я МОГУ изменить каталог загрузки на корень установки, а затем создать подпапки с помощью плагина, который позволяет организовывать медиафайлы таким образом. ТЕМ Не МЕНЕЕ, обращение к слагу страницы вызовет открытие сервером каталога файлов для фактической папки, а не страницы в базе данных WP.

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

Пример:
http://example.com/wp-content/uploads/courtcase/testimony.pdf
станет
http://example.com/courtcase/testimony.pdf

И, конечно, мне нужно сделать это для всех медиафайлов, а не вручную добавлять переадресации.

{ПРИМЕЧАНИЕ: Это требование клиента. Да, это безумие так заботиться о URL, но такие требования проекта, и они не изменят свою позицию, чтобы принять какой-либо другой результат.}

если вы измените постоянную ссылку на имя поста в настройках и прикрепите testimony.pdf в вашем посте, вы получите http://example.com/your_post/testimony.pdf, чтобы получить URL текстового документа, вы можете использовать этот код

    <?php

$args = array(
    'post_type'   => 'attachment',
    'numberposts' => -1,
    'post_status' => 'any',
    'post_parent' => $post->ID,
    'exclude'     => get_post_thumbnail_id(),
);

$attachments = get_posts( $args );

if ( $attachments ) {
    foreach ( $attachments as $attachment ) {
        echo apply_filters( 'the_title', $attachment->post_title );
        the_attachment_link( $attachment->ID, false );
    }
}

?>

или поместите этот код в single.php

<ul>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post();    
//добавьте в конец цикла
 $args = array(
   'post_type' => 'attachment',
   'numberposts' => -1,
   'post_status' => null,
   'post_parent' => $post->ID
  );

  $attachments = get_posts( $args );
     if ( $attachments ) {
        foreach ( $attachments as $attachment ) {
           echo '<li>';
           the_attachment_link( $attachment->ID, true );
           echo '<p>';
           echo apply_filters( 'the_title', $attachment->post_title );
           echo '</p></li>';
          }
     }

 endwhile; endif; ?>
</ul>

код вернет http://wp.example.net/post_name/attachment_name.
это ссылка https://codex.wordpress.org/Function_Reference/get_attachment_link

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

Решение проблемы с медиа-URL слугами без каталога загрузок

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

Понимание проблемы

Когда вы загружаете медиафайлы в WordPress, по умолчанию они сохраняются в папке /wp-content/uploads/, что часто приводит к конфликтам с именами страниц, особенно если страницы имеют такие же названия, как и загружаемые документы. Например, файл testimony.pdf, загруженный в защищенный раздел courtcase, может конфликтовать с URL страницы http://example.com/courtcase/.

Чтобы избежать этой проблемы, вам нужно будет принимать во внимание следующие моменты:

  1. Изменения в путях загрузки: Просто изменив каталог загрузки на корневой для WordPress, вы столкнётесь с проблемой, когда сервер может попытаться открыть реальную папку, а не базу данных, в результате чего произойдут ошибки 404.

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

Proposed Solution

Для решения вашей задачи следует рассмотреть возможность использования редиректов и правил перезаписи URL (rewrite rules) в WordPress. Вот как вы можете это реализовать:

  1. Добавление кастомных правил перезаписи:
    В файле functions.php вашей темы добавьте следующее:

    function custom_rewrite_rules() {
       add_rewrite_rule('^courtcase/(.+)$', 'wp-content/uploads/courtcase/$matches[1]', 'top');
    }
    add_action('init', 'custom_rewrite_rules');

    Этот код создаёт правило, которое перенаправит все запросы к http://example.com/courtcase/* на соответствующие файлы в wp-content/uploads/courtcase/.

  2. Обновление постоянных ссылок:
    После добавления правил перезаписи вам нужно обновить настройки постоянных ссылок в WordPress. Для этого пройдите в админку, выберите НастройкиПостоянные ссылки и просто нажмите Сохранить изменения. Это позволит WordPress обновить свои правила перезаписи.

  3. Использование фильтров для генерации ссылок:
    Чтобы автоматически генерировать ссылки на вложения, используйте следующие фильтры и функции для того, чтобы извлекать медиафайлы, прикреплённые к постам. Например, в single.php можно было бы добавить код:

    <ul>
    <?php if (have_posts()) : while (have_posts()) : the_post();
       $args = array(
           'post_type' => 'attachment',
           'numberposts' => -1,
           'post_status' => 'any',
           'post_parent' => $post->ID,
       );
    
       $attachments = get_posts($args);
       if ($attachments) {
           foreach ($attachments as $attachment) {
               echo '<li>';
               echo wp_get_attachment_link($attachment->ID, false);
               echo '<p>' . apply_filters('the_title', $attachment->post_title) . '</p>';
               echo '</li>';
           }
       }
    endwhile; endif; ?>
    </ul>

    Этот код генерирует список вложений с теми URL, которые вы хотите.

Заключение

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

Такое решение полностью соответствует поставленным требованиям и может быть масштабируемым в зависимости от структуры вашего проекта.

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

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