Intereting Posts
Добавление и удаление столбцов из панели страниц admin Информация о продукте Woocommerce на боковой панели? Разработка плагинов – конструктор классов без стрельбы wp_enqueue_style action hook WordPress postmeta: хранить данные как массив или отдельный элемент? как вставить форму подписки на бюллетень гравитации в шаблон Зарегистрировать меню с помощью «Автоматически добавлять новые страницы верхнего уровня в это меню» Как перенаправление блоков на одну страницу сообщения, если совпадение соответствует? Вывод коротких кодов в верхней части страницы Совместное использование базы данных для совместной разработки RSS Feed Broken – Limit? Подготовьте контент из другого CMS / WYSIWYG к редактору WordPress Создайте собственный цикл внутри single.php с разбивкой на страницы Вывод заголовка объекта Post в виде div-класса с ACF Breadcrumb, который показывает несколько пользовательских таксономий WP_Editor – настройка расположения рендеринга на странице

Использование wp_filesystem в плагинах для хранения настроек

Я пытаюсь исправить свой плагин с ответами, которые я получил здесь: Использование wp_filesystem в плагинах Фон я написал тему ( https://github.com/bassjobsen/jamedo-bootstrap-start-theme ) и плагин ( https: // github .com / bassjobsen / wp-less-to-css ) теперь я хочу интегрировать плагин в тему. Плагин написал файл CSS в папку. Запись файлов с помощью встроенной функции PHP не является безопасной, как описано здесь: http://ottopress.com/2011/tutorial-using-the-wp_filesystem/ . Предыдущий ответ помогает мне исправить эти проблемы для плагина.

Решение предоставляет реле @otto на request_filesystem_credentials которое, как представляется, требует URL. Этот URL-адрес даст мне некоторые проблемы при интеграции плагина с темой.

Моя цель – использовать настройки из настраивателя после сохранения, чтобы создать новый файл css.

Теперь у меня есть функции functions.php:

 add_action( 'customize_save_after', 'lesscustomize' ); function lesscustomize($setting) { //$setting is no used here $updatecss = WP_LESS_to_CSS::$instance; add_filter( 'add_extra_less_code', 'add_extra_less_now_live'); function add_extra_less_now_live($parser) { return 'h1{color:'.get_theme_mod( 'heading_color').'}'; } $updatecss->wpless2csssavecss(); } 

Где wpless2csssavecss() теперь сохраняет файл с file_put_contents . file_put_contents следует заменить на $wp_filesystem->put_contents(); , Причина $wp_filesystem будет использоваться как глобальная, я думаю, что должно быть возможно получить учетные данные файловой системы в моей функции lesscustomize() . Кроме того, я понятия не имею, как это сделать без URL. Будет URL, но он вызывается Ajax и не отображается для пользователя.

Идея использовать «customize_save_after» появилась в https://stackoverflow.com/questions/14802251/hook-into-the-wordpress-theme-customizer-save-action/16679837

Мой первоначальный вопрос, можно ли получить учетные данные файловой системы в моем lesscustomize() ? Или, если не будет альтернативы, чтобы закрепить настройки настройки для сохранения действий и получить учетные данные файловой системы, чтобы сохранить мои настройки?

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

То, что вы пытаетесь сделать, неверно, если оно предназначено для общего использования и не предназначено для нужд конкретного клиента. Динамическое изменение кода вашей темы, а css – это код типа JS, обычно это плохая идея, которая приносит только> проблемы обслуживания

В моей теме я использую LESS вместо CSS (хотя вы также можете писать CSS). Я думаю, что это будет полезно и соответствует потребностям пользователей темы. Во-первых, LESS сохраняет чистоту, а во-вторых, моя тема строится с помощью Bootstrap Twitter. МЕНЬШЕ будет самым видным способом прямого преобразования HTML / CSS на основе Bootstrap. Я не изменяю свой код темы, я только хочу сохранить мой CSS в файл, где CSS будет скомпилирован с LESS. Стратегия обслуживания кода, описанного здесь: http://bassjobsen.weblogs.fm/integrate-less-jbst-wordpress-theme/

В дополнение к теоретическим причинам ожидания пользователей связаны с UX настройки темы, которые не связаны с записью файлов на сервер.

Я не понимаю, какие файлы для записи имеют отношение к UX. Люди, использующие мою тему, выбирают тему, которая использует Bootstrap и поэтому МЕНЬШЕ. Я думаю, они должны понимать, что где-то там должны быть написаны файлы. Я согласен, что дополнительный шаг для заполнения ваших учетных данных даст плохой UX.

Если вам действительно нужно сохранить файлы на сервере, то подходящим местом для них является каталог / wp-content / uploads.

Да, это то, что я сейчас делаю. http://ottopress.com/2011/tutorial-using-the-wp_filesystem/ говорит мне, что это плохая идея. Начиная с WP3.8 он также не пройдет тесты темы на wordpress.org: «WARNING: file_put_contents был найден в файле wp-less-to-css.php возможных файловых операций».

Лучший способ сделать это – иметь минимальные файлы LESS, которые имеют отношение только к параметрам, которые контролируются пользователем. как только параметры будут изменены, вы скомпилируете LESS и сохраните сгенерированный CSS в опции и выведете его как часть каждого HTML-страниц, как и большинство тем, которые делают с их настраиваемыми параметрами.

Я согласен, что это может быть вариант. Написание встроенного CSS не всегда является лучшим решением, см. Также: https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery . Не все настройки настройки должны быть критическими или частью вышеописанного CSS. Кроме того, в моем случае некоторые настройки также перекомпилируют CSS Bootstrap (например, изменяя точку с пометкой @ grid-float), я не могу встроить этот код.

То, что вы пытаетесь сделать, неверно, если оно предназначено для общего использования и не предназначено для нужд конкретного клиента. Динамически изменяя код вашей темы, а css – это код JS, обычно это плохая идея, которая приносит только проблемы с обслуживанием – вы проверяете все значения, которые можно скомпилировать? Как вы будете обрабатывать обновления? Как вы будете обрабатывать сетевые установки, где пользователи не знают учетные данные FTP?

В дополнение к теоретическим причинам ожидания пользователей связаны с UX настройки темы, которые не связаны с записью файлов на сервер.

Если вам действительно нужно сохранить файлы на сервере, то правильным местом для них является каталог / wp-content / uploads.

Лучший способ сделать это – иметь минимальные файлы LESS, которые имеют отношение только к параметрам, которые контролируются пользователем. как только параметры будут изменены, вы скомпилируете LESS и сохраните сгенерированный CSS в опции и выведете его как часть каждого HTML-страниц, как и большинство тем, которые делают с их настраиваемыми параметрами.

Обновить

Вариант сеанса, описанный ниже, кажется очень неуверенным! Дальнейшее исследование ясно показывает, что массив, возвращаемый request_filesystem_credentials, содержит ваши учетные данные в виде простого текста. Поэтому хранить это в сеансе кажется плохой идеей.

Обратите внимание, что отправка учетных данных по незащищенному соединению (http) при отправке формы также кажется плохим. Последнее можно решить, добавив свои учетные данные в wp_config.php. При этом убедитесь, что chmod 600 ваш wp_config.php (см .: http://codex.wordpress.org/Changing_File_Permissions ).

Установка учетных данных в wp-config.php, например:

 define('FS_METHOD', 'ftpext'); define('FTP_HOST', 'localhost'); define('FTP_USER', 'ftpuser'); define('FTP_PASS', 'ftpuser'); define('FTP_BASE', '/home/username/http_docs/'); 

После этого мы можем сохранить их (временно) в базу данных для использования с помощью настраивателя. Это похоже на сохранение, потому что настройки из wp-config.php также сохраняются в базе данных. Сохранение базы данных будет выполнено с помощью set_theme_mod созданного с помощью: https://stackoverflow.com/questions/14802251/hook-into-the-wordpress-theme-customizer-save-action/16679837

После выполнения всего этого окончательного кода, который позволяет мне сохранить настройку настройки в файле с помощью wp_filesystem:

 function lesscustomize($setting) { $updatecss = WP_LESS_to_CSS::$instance; $updatecss->wpless2csssavecss(unserialize(get_theme_mod('customizercredits'))); } add_action( 'customize_save_after', 'lesscustomize' ); function storecedits( $wp_customize ) { $in = true; $url = 'customize.php'; if (false === ($creds = request_filesystem_credentials($url, '', false, false,null) ) ) { $in = false; exit; } if ($in && ! WP_Filesystem($creds) ) { // our credentials were no good, ask the user for them again request_filesystem_credentials($url, '', true, false,null); $in = false; exit; } set_theme_mod('customizercredits', serialize($creds)); } add_action('customize_controls_init', 'storecedits', 1); 

—————– окончательное обновление ———————-

Я нашел, что могу решить теоретическую проблему, используя сеансы. К сожалению, это порождает новые вопросы о безопасности. Сначала будут разрешены сеансы (найдены здесь https://stackoverflow.com/a/4769449/1596547 ), вызывающие другие неприятности? и если нет, то какие риски хранят мои учетные данные в сеансе?

 function kana_init_session() { session_start(); } add_action('init', 'kana_init_session', 1); function updatefiles( $wp_customize ) { WP_Filesystem($_SESSION['creds']); global $wp_filesystem; $contentdir = trailingslashit( $wp_filesystem->wp_content_dir() ); echo $contentdir; $wp_filesystem->mkdir( $contentdir. 'cbe' ); if ( ! $wp_filesystem->put_contents( $contentdir . 'cbe/test.txt', 'Test file contents', FS_CHMOD_FILE) ) { echo "error saving file!"; } } add_action('customize_save', 'updatefiles', 1); function storecredentials( $wp_customize ) { $in = true; $url = 'customize.php'; if (false === ($creds = request_filesystem_credentials($url, '', false, false,null) ) ) { $in = false; exit; } if ($in && ! WP_Filesystem($creds) ) { // our credentials were no good, ask the user for them again request_filesystem_credentials($url, '', true, false,null); $in = false; exit; } $_SESSION['creds'] = $creds; } add_action('customize_controls_init', 'storecredentials', 1);</strike>