Как просматривать файлы в директориях на экране "Редактирование тем"
Мне нравится организовывать папки в директории темы для скриптов и стилей, но я не могу получить доступ к этим папкам через интерфейс "Редактирование тем". Это создает проблемы при работе с клиентами, которые не предоставляют FTP-доступ. Есть ли способ просматривать эти папки и файлы в них из админки WordPress?
Нет способа сделать это без изменения ядра.
Вы должны видеть файлы .php
, которые находятся в подкаталогах, но вы не увидите ничего выше корневой директории темы для файлов .css
, а также не увидите файлов JavaScript.
Если вы посмотрите на wp-admin/theme-editor.php
, соответствующие строки...
<?php
$allowed_files = $theme->get_files( 'php', 1 );
$has_templates = ! empty( $allowed_files );
$style_files = $theme->get_files( 'css' );
$allowed_files['style.css'] = $style_files['style.css'];
$allowed_files += $style_files;
$theme
— это объект WP_Theme
, представляющий текущую тему. Он создается несколькими строками выше.
Метод get_files
ищет файлы в директории, сопоставляя расширение файла (первый аргумент) и используя глубину поиска (второй аргумент). Первый вызов get_files
получает все PHP-файлы в директории темы, а также любые подкаталоги на один уровень выше директории темы.
Второй вызов получает все CSS-файлы в директории темы, но не рекурсивно заходит в подкаталоги (обратите внимание на отсутствие аргумента $depth
).
С этим мало что можно поделать; в theme-editor.php
заметно отсутствие вызовов apply_filters
и do_action
, и метод get_files
также их не содержит. Вы сильно ограничены.
И когда PHP не работает, пришло время попробовать некрасивые хаки на JavaScript!
К сожалению, это тоже не помогает. Я пробовал добавлять файлы в список через JavaScript и AJAX, но клик на файле, добавленном через JS, приводит к сообщению об ошибке из-за функции validate_file_to_edit
, которая проверяет текущий файл на редактирование против списка $allowed_files
(см. код выше, который его получает).

Плагин Advanced Code Editor предоставляет эту функциональность.
Из описания плагина:
Включает подсветку синтаксиса во встроенных редакторах исходного кода тем и плагинов. Поддерживает PHP, HTML, CSS и JS.
Эффективно редактируйте свои темы или плагины, даже имея доступ только через браузер, благодаря подсветке синтаксиса во встроенных редакторах WordPress. Поддерживает PHP, HTML, CSS и JavaScript
Обновление: Упомянутый выше плагин, похоже, не имеет древовидной структуры для тем, только для плагинов. Однако есть другой плагин, который предоставляет эту функциональность: WPide
Из описания плагина:
Древовидная структура файлов, позволяющая получать доступ и редактировать любые файлы в папке wp-content (плагины, темы, загрузки и т.д.)
Также существует тикет в трекере по этой теме; надеемся, что это будет исправлено в будущей версии WordPress.

Это всё ещё не то, что он ищет — этот плагин только меняет внешний вид редактора и добавляет несколько довольно крутых функций, но всё равно не позволяет редактировать все файлы в директории темы (что и является настоящей проблемой)

Справа от страницы должно быть дерево директорий... там можно получить доступ ко всем CSS, JS, HTML и PHP файлам

Вау, классный плагин, и он от участника WPSE: @bainternet :)

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

Плагин WPide, кажется, поддерживает древовидную структуру каталогов для тем.

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

Я вообще не вижу файлов, которые находятся в каталоге! Например, в моей папке css/ у меня есть 'style.css', 'style-med.css' и 'style-mobile.css'. Ни один из них не виден на странице "Редактировать темы" :(

Это не проблема для всех пользователей.
Поэтому обновитесь до WordPress 3.4.x, если вы еще этого не сделали.
Помните, что css/style.css будет отображаться в алфавитном порядке под буквой 'c', но отдельно в разделе Стили внизу.
Если это не сработает, попробуйте ту же тему на локальной установке - если там всё работает, возможно, их сервер не разрешает рекурсивное перечисление.

Я сталкиваюсь с этой проблемой почти каждый день у наших клиентов WordPress.
Я использую плагин, который позволяет редактировать все файлы WordPress. Но это небезопасно для аккаунтов на shared-хостинге (иногда плагин позволяет редактировать любые файлы на всем сервере).
Этот плагин был удалён с wordpress.org (думаю, по соображениям безопасности), а домен автора теперь неактивен. Я нашёл небольшой обзор здесь: http://www.themepremium.com/access-ftp-from-wordpress-dashboard-using-myftp-wordpress-plugin/
Ниже я приведу ссылку на копию плагина.
ВАЖНО: Я не имею никакого отношения к автору этого плагина и не модифицировал его. Я не несу ответственности за то, как вы используете этот плагин.

Если у вас нет доступа к FTP, но вы можете использовать небольшой хак в редакторе темы...
Просто добавьте следующий код в существующий шаблон:
<?php
@file_put_contents(get_template_directory() .'/template-custom-page.php', 'temp content');
?>
Посетите URL, который использует шаблон с добавленным кодом, чтобы создать файл - он должен создаться (при условии, что пользователь веб-сервера имеет права на создание файлов в папке темы).
Удалите добавленный код из исходного шаблона (после создания файла), иначе код будет каждый раз перезаписывать содержимое файла при выполнении.

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

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

Эх...не переживай по этому поводу. Это скорее недостаток системы рейтинга на сайтах типа SO. Когда у тебя меньше 50 баллов, ты не можешь комментировать вопросы и тому подобное. Вообще, я прокомментировал этот вопрос только потому, что любое упоминание о редактировании системных файлов вызывает у меня тревогу — вот и среагировал спонтанно. Удачи, друг!
