web-dev-qa-db-fra.com

Quoi WP dossier puis-je utiliser pour écrire des fichiers?

Je travaille sur un thème qui utilise le code CSS dynamique et donne à l’administrateur la possibilité de le placer également dans un fichier. Le problème est que je ne suis pas sûr de savoir quel dossier WP est toujours accessible en écriture. À l'origine, j'avais ajouté la création de fichier CSS à themename/css/ dir mais, puisque WP supprime le thème lors de la mise à jour, cela est devenu un problème.

Selon vous, quelle est la meilleure façon de procéder et quel est le dossier WP en écriture le plus sûr que je puisse utiliser pour cette fonctionnalité?

6
Benn

Le meilleur emplacement est le répertoire uploads - il sera accessible en écriture par le serveur et constitue le répertoire defacto pour stocker tous les fichiers générés/téléchargés par l'utilisateur:

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

Le seul répertoire avec un accès en écriture garanti est le répertoire de téléchargement. Tout le reste pourrait être protégé.

De nos jours, nous déployons des sites avec Composer, gardons tout sous contrôle de version et créons de nouveaux sites avec chaque déploiement afin de pouvoir restaurer le site déployé. Cela signifie que le répertoire sera créé complètement à chaque déploiement.

Utilisez le répertoire uploads si vous devez écrire des fichiers, car c’est le seul qui soit conservé (en dehors des autres répertoires).

4
fuxia

Une solution alternative consiste à créer un fichier PHP qui récupère les options du thème et génère le CSS et le met en file d'attente directement. par exemple.

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

Cela peut sembler étrange au début, mais comme un nouveau fichier doit être écrit via le système de fichiers WP pour obtenir les autorisations de propriétaire/groupe correctes, c’est une solution au problème.

// 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');

À ce stade, vous devez inclure tous les autres fichiers wp-includes dont vous avez besoin pour obtenir les options de thème, ce qui peut varier en fonction de la façon dont vous les enregistrez. (Vous aurez probablement besoin d'en ajouter plus pour ne pas avoir d'erreurs fatales.).

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

Ensuite, affichez simplement les options CSS ...

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

Je pense que le meilleur endroit pour écrire est d'ajouter un dossier dans le dossier wp-content. Ici, vous pouvez écrire vos fichiers CSS sans les écraser lorsque vous avez une mise à jour de thème ou une mise à jour WP.

0