WordPress как на ладони
wordpress jino

Папка wp-content

WordPress состоит из 3 папок wp-includes, wp-admin, wp-content и из нескольких файлов рядом с этими папками. Все файлы и две папки, кроме wp-content — это и есть сам WordPress, движок.

Т.е. каталоги: wp-includes и wp-admin — это ядро WordPress, а wp-content — это все остальное — все пользовательские данные...

В директории wp-content хранятся практически все пользовательские файлы, кроме файла конфигурации wp-config.php, который является неотъемлемой частью ядра/движка. Здесь находятся плагины, темы, файлы плагинов, тем и содержимого сайта. Тут же принято хранить все файлы связанные с расширением возможностей WordPress.

В дистрибутиве WordPres wp-content содержит один файл index.php и 3 папки: plugins, themes, languages.

файл index.php должен находиться в wp-content всегда. Вот его содержимое:

<?php // Silence is golden.

Зачем же он нужен? Он запрещает видеть список файлов в папке. Если index.php не существует, а ваш веб-сервер позволяет смотреть файлы в директориях, то пройдя по ссылке http://site.ru/wp-content, можно увидеть все файлы и папки в этой директории. Это могут использовать хакеры, чтобы получить доступ к файлам ключей, что позволит взломать сайт. Например, если у вас установлен уязвимый плагин, то сайт можно будет легко проверить на наличие этого уязвимого плагина, а дальше атакующий быстро сможет взломать сайт.

При обновлении WordPress вручную, никогда не трогайте папку wp-content и ничего в ней. Она к обновлению WordPress никакого отношения не имеет.

Список того, что может находиться в каталоге wp-content:

/plugins — плагины

Плагины находятся в директории wp-content/plugins. Плагин может представлять собой один или несколько файлов внутри папки. Любые файлы в директории /plugins сканируются WordPress, чтобы определить, является ли файл файлом плагина. Если файл определяется как плагин, он появляется в админ-панели в разделе «Плагины» и готов к активации.

Для деактивации плагина можно удалить плагин из папки /plugins. Также можно переименовать название папки, в этом случае, WordPress деактивирует ранее активный плагин до того, как начнет вывод содержимого. Но имейте ввиду, что плагины лучше удалять из админ-панели, через кнопку Удалить, потому что при удалении срабатывают некоторые функции, которые подчищают данные плагина в базе данных или в файлах.

/mu-plugins — обязательные плагины

В WordPress есть также «Обязательные плагины», они находится в директории wp-content/plugins. О них я писал отдельную стать, обязательно ознакомьтесь. А тут я скажу о них коротко:

Обязательные к использованию плагины (Must-use plugins), известные также под названием mu-plugins — это плагины, которые устанавливаются в специальную папку mu-plugins в каталоге контента wp-content и активируются автоматически (всегда активны) для сайта и сайтов сети. Эти плагины не видно среди обычных плагинов. В админ-панели они отображаются в верхней информационной строке и их невозможно отключить, кроме как удалить файл плагина из каталога wp-content/mu-plugins.

/themes — темы

Темы хранятся в директории wp-content/themes. Каждая тема должна находиться в собственной папке и содержать правильно оформленный файл style.css, чтобы WordPress распознал ее как тему, пригодную для использования. В директории темы должны находиться как минимум 2 файла: index.php и style.css.

WordPress может хранить в этой директории сколько угодно тем. Вы можете легко посмотреть любую имеющуюся тему или активировать её во вкладке Внешний вид ► Темы в админ-панели.

/uploads — медиафайлы и загрузки

WordPress хранит загруженные файлы в папке wp-content/uploads. Эта директория не существует в дистрибутиве WordPress по умолчанию. Она создается при первой загрузке файла в WordPress. Отдельное создание необходимо, потому что эта папка может быть перемещена в другое место (см. ниже)

По умолчанию WordPress хранит загрузки в папке по месяцам и годам:

/wp-content/uploads/2012/06/image.png

Перед тем как можно будет загружать какие-либо изображения или файлы в WordPress, на сервере необходимо разрешить создание папок в директории /wp-content. При загрузке первого изображения WordPress автоматически создает директорию /uploads и необходимые поддиректории в ней. После того как первый файл загружен, верните права для /wp-content обратно, обычно 755. Некоторые серверы сразу позволяют скрипту создавать папки и файлы.

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

WordPress НЕ умеет распознавать и импортировать в админку изображения загруженные в uploads напрямую (не через админку). И в библиотеке файлов WordPress такие файлы не отображаются — WordPress о них ничего не знает.

uploads в Multisite

В Multisite установке для основного сайта фалы загружаются как обычно. А для всех дополнительных сайтов, создается папка /wp-content/uploads/sites/2, где 2 - это ID сайта сети.

Так для каждого сайта создается папка с его ID в папке /wp-content/uploads/sites. Далее файлы также располагаются в папках по году и месяцу.

Такой подход позволяет разделить загрузки для каждого сайта и упрощает их обслуживание.

До версии WP 3.5 файлы дополнительных сайтов располагались не в /wp-content/uploads/sites, а в /wp-content/blogs.dir.

Так например, директория для сайта с ID 3 выглядит так:

  • WP 3.5 и выше: /wp-content/uploads/sites/3
  • WP 3.4 и ниже: /wp-content/blogs.dir/3
Перемещение папки uploads

Чтобы переместить папку uploads нужно определить константу UPLOADS в wp-config.php так:

define('UPLOADS', 'uploads'); // значит что папка uploads должна лежать в корне сайта

Или можно изменить опции: 'upload_path' и 'upload_url_path' в таблице опций (см. update_option()).

Перемещать папку uploads не рекомендуется, об этом я писал в статье: Баг с перемещением папки uploads.

/upgrade — автообновления

Директория wp-content/upgrade создается WordPress автоматически при обновлении WordPress. Эта папка используется для хранения новой версии WordPress, скачанной с WordPress.org. Перед обновлением, WordPress скачивает архив и извлекает его содержимое в эту папку. Чтобы процесс автоматического обновления протекал успешно, рекомендуется не трогать эту папку. Если данная директория удалена, WordPress создаст её при следующем обновлении.

/languages — переводы

Каталог wp-content/languages присутствует только в том случае, если вы устанавливаете не английскую версию WordPress. В нем содержаться все файлы локализации (перевода) WordPress. Такие файлы имеют расширения:

  • .mo - сжатая версия аналогичного .po файла, которая используется при переводе;
  • .po - исходный файл перевода. Этот файл можно использовать для редактирования перевода. После редактирования его нужно скомпилировать в сжатую версию с расширением .mo.

Также в languages могут находиться специальные поддиректории:

  • /pliugns — содержит переводы плагинов. Файл перевода должен иметь формат: название плагина-локаль.mo, например: akismet-ru_RU.mo. Перед загрузкой своего файла перевода, плагин проверяет наличие файла перевода в этой папке и если он там есть, то используется этот файл перевода, а не родной перевод плагина.

  • /themes — содержит переводы тем. Файл перевода должен иметь формат: название темы-локаль.mo, например: twentyfifteen-ru_RU.mo. Также как и с плагинами — эти файлы имеют больший приоритет перед родными файлами перевода темы.

Произвольные директории

В /wp-content можно создавать любые директории. Некоторые плагины, создают такие папки для хранения файлов. Обычно отдельная папка создается, когда нужно хранить много файлов или когда хранимые файлы как-то отличаются от остальных.

Например плагин WP Super Cache создает директорию /wp-content/cache для хранения кэшированных страниц сайта. Кэшированная страница — это сгенерированная страница сайта, сохраненная как статический файл HTML. При обращении к такой странице она не генерируется повторно, а отдается статический файл. Это и есть страничный кэш, который уменьшает нагрузку сервера в десятки раз, поскольку страницы не генерируются при каждом просмотре, а создаются только когда кэш перезаписывается.

Плагин WP Super Cache также добавляет два файла в директорию wp-content: advanced-cache.php (специальный) и wp-cache-config.php. Они нужны для работы WP Super Cache.

Другой пример, популярный плагин для галерей — NextGen Gallery — создает директорию /wp-content/gallery для хранения изображений, загруженных в галереи. Каждая созданная галерея представляет собой поддиректорию /gallery.

Еще пример, мой плагин kama thumbnail, который также создает папку /wp-content/cache/thumb и записывает в нее созданные файлы миниатюр.

Специальные файлы

advanced-cache.php

Вызывается на самом раннем этапе загрузки WordPress, в файле wp-settings.php, если константа WP_CACHE включена. Вот так выглядит вызов:

// Для использования плагинами кэширования. Использует статический файл для обрыва работы скрипта.
if ( WP_CACHE )
	WP_DEBUG ? include( WP_CONTENT_DIR . '/advanced-cache.php' ) : @include( WP_CONTENT_DIR . '/advanced-cache.php' );

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

object-cache.php

Вызывается из функции wp_start_object_cache(), которая в свою очередь вызывается из файла wp-settings.php чуть позднее advanced-cache.php. В отличии от advanced-cache.php, object-cache.php срабатывает всегда, если он существует. Он нужен, чтобы переопределить работу базового кэширования объектов WordPress.

На основе этого файла работают такие кэши объектов как: Memcache, Memcached, APC, XCache.

Вызов выглядит так:

// Запускает объектное кэширование WordPress или внешнее объектное кэширование, если существует специальный файл.
wp_start_object_cache();

maintenance.php

wp-content/maintenance.php отвечает за вывод страницы-заглушки, которая показывается в момент автообновления WoordPress. Такая страница определена по умолчанию и за её вывод отвечает функция wp_maintenance(). Но если создать файл maintenance.php в wp-content, то за вывод страницы-заглушки будет отвечать содержимое этого файла.

В maintenance.php нужно описать страницу-заглушку по всем правилам HTML.

Подробнее читайте в описании функции wp_maintenance()

db-error.php

Позволяет показать произвольный шаблон страницы ошибки соединения с базой данных.

Если файл существует в папке wp-content - wp-content/db-error.php, тогда вместо дефолтного сообщения WordPress об ошибки соединения с базой данных будет загружен этот файл. В файле нужно создать HTML код страницы об ошибке!

Страница об ошибке подключения должна устанавливать статус ответа 500, чтобы поисковики не обрабатывали контент.

Файл db-error.php вызывается функцией dead_db(), а функция в свою очередь вызывается при ошибке подключения к БД.

Пример такой страницы смотрите здесь.

sunrise.php

Загружается только для мультисайтовой сборки, т.е. когда срабатывает условие is_multisite() и при этом определена константа 'SUNRISE' (её нужно определить в файле wp-config.php).

Файл wp-content/sunrise.php позволяет на раннем этапе изменить логику работы сайта в сети мультисайт. Например, тут можно установить глобальные переменные $current_site,
$current_blog определяющие текущий сайт сети. Или можно изменить префикс таблиц БД - переменная $table_prefix.

Также в файле sunrise.php можно изменить константы отвечающие за то, где находится каталоги MU плагинов или обычных плагинов. см. wp_plugin_directory_constants()
.

sunrise.php подключается еще до константы SHORTINIT.

sunrise.php подключается в файле wp-includes/ms-settings.php, который в свою очередь подключается в основном загрузочном файле wp-settings.php.

Переименование или перемещение папки wp-content

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

Переместить или переименовать wp-content очень просто. Для этого нужно открыть конфигурационный файл wp-config.php, который лежит в корне вашего сайта и определить в нем две константы:

  • WP_CONTENT_DIR — путь до каталога контента;
  • WP_CONTENT_URL — URL на каталог контента.
define('WP_CONTENT_DIR', $_SERVER['DOCUMENT_ROOT'] .'/data');
define('WP_CONTENT_URL', 'http://'. $_SERVER['HTTP_HOST'] .'/data');

Данный код переименовывает wp-content в data.

Папка wp-content 14 комментариев
Полезные 2 Вопросы 1 Все
  • Алексей cайт: webdevfreaks.ru

    Отличная статья. Спасибо тебе за то, что ты делаешь. Я частенько использую твой сайт, для чтения мануалов по стандартным функциям wordpress'a

    Ответить1.4 года назад #
  • VITALY cайт: tvoymoy-dieta.ru @

    где хранятся опубликованые статьи?

    Ответить1.2 года назад #
  • Светлана cайт: www.psysolo.ru

    Спасибо за статью! Меня насторожило появление файлов advanced-cache.php и wp-cache-config.php. Так как сайт недавно взломали, подумала было что опять что-то чужеродное, но оказывается, все в порядке.

    Ответитьгод назад #
  • campusboy1951 cайт: www.youtube.com/c/wpplus

    Небольшая очепятка в конце, написано wp-congig.php

    Ответитьгод назад #
  • sHugar

    Получается, через ftp нету доступа к базе данных с постами?

    • campusboy1951 cайт: www.youtube.com/c/wpplus

      Конечно. С чего бы он был? По ftp вам доступны файлы сайта, а база хранится в другом месте (у ней свой отдельный сервер) и по ftp она недоступна.

    • Kama4696

      Вы про какой доступ? Про визуальный интерфейс phpMyAdmin? Если про него то campusboy правильно ответил - нет.

      А вообще, доступ к базе есть через PHP код, через $wpdb.

  • Alex cайт: kinohere.ru

    Спасибо тебе wp;-kama за то что ты есть и радуешь людей!

  • Олег

    Добрый день! Не могу разобраться в одном вопросе. Установил мультисайт, создал дополнительный сайт на базе основного, но при загрузке медиафайлов (изображений) они не отображаются ни в консоли, ни по факту на сайте.

    Читаю про директорию blogs.dir в каталоге /wp-content/ - Она у меня не создалась автоматически, я ее создал, мне нужно прописать ей права или что делать с ней? smile smile

    Вопрос заключается в том, что я не пойму как мне сделать в итоге так, что бы изображения загружались отдельно к каждому сайту и были доступны?

    • Kama4696

      Старая у меня тут инфа... Обновил.

      blogs.dir была до версии 3.5. Теперь файлы лежат в /wp-content/uploads/sites. Создай эту папку...

  • Владимир cайт: visualcommunication.ru

    Срочно вопрос!!! Загрузил картинки они грузятся на странице с адреса https://visualcommunication.ru/wp-content/uploads.
    wp-content закрыт от индексации, картинки получается не индексируются???
    Но есть постоянные ссылки когда непосредственно нажимаешь на картинку.
    Что делать??? Спасибо

    Ответить16 дней назад #

Здравствуйте, !

Ваш комментарий
Предпросмотр