it-swarm.com.ru

Какие WP папку можно использовать для записи файлов?

Я работаю над темой, которая использует динамический в CSS головы и дает администратору возможность также поместить его в файл. Проблема в том, что я не уверен, что папка WP всегда доступна для записи. Первоначально я добавил создание файла CSS в themename/css/ dir, но поскольку WP удаляет тему при обновлении, это стало проблемой.

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

6
Benn

Лучшее место - каталог uploads - он будет доступен для записи на сервере, и это каталог defacto для хранения любых пользовательских/загруженных файлов:

$dirs = wp_upload_dir();
$path = $dirs['basedir']; // /path/to/wordpress/wp-content/uploads
10
TheDeadMedic

Единственный каталог с гарантированным доступом для записи - это каталог загрузки. Все остальное может быть защищено.

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

Используйте каталог uploads, если вам нужно записать файлы, потому что это единственный, который хранится (вне других каталогов).

4
fuxia

Один из альтернативных подходов - получить файл PHP, который получает параметры темы и выводит CSS, а вместо этого ставит их в очередь. например.

wp_enqueue_style('custom-css',trailingslashit(get_template_directory_uri()).'styles.php');

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

// send CSS Header
header("Content-type: text/css; charset: UTF-8");

// faster load by reducing memory with SHORTINIT
define('SHORTINIT', true);

// recursively find WordPress load
function find_require($file,$folder=null) {
    if ($folder === null) {$folder = dirname(__FILE__);}
    $path = $folder.DIRECTORY_SEPARATOR.$file;
    if (file_exists($path)) {require($path); return $folder;}
    else {
        $upfolder = find_require($file,dirname($folder));
        if ($upfolder != '') {return $upfolder;}
    }
}

// load WordPress core (minimal)
$wp_root_path = find_require('wp-load.php');
define('ABSPATH', $wp_root_path);
define('WPINC', 'wp-includes');

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

include(ABSPATH.WPINC.DIRECTORY_SEPARATOR.'version.php');
include(ABSPATH.WPINC.DIRECTORY_SEPARATOR.'general-template.php');
include(ABSPATH.WPINC.DIRECTORY_SEPARATOR.'link-template.php');

Затем просто выведите параметры CSS ... например.

echo 'body {color:' . get_theme_mod('body_color') . ';}';
echo 'body {backgroundcolor:' . get_theme_mod('body_background_color') . ';}';
exit;
2
majick

Я думаю, что лучшее место для записи - это добавить папку в папку wp-content. Здесь вы можете написать свои CSS-файлы без перезаписи, когда у вас есть обновление темы или обновление [WP].

0
Jorin van Vilsteren