it-swarm.com.de

War WP Ordner kann ich zum Schreiben von Dateien verwenden?

Ich arbeite an einem Thema, das dynamisches Head-CSS verwendet und dem Administrator die Option gibt, dasselbe auch in einer Datei zu platzieren. Problem ist, dass ich nicht sicher bin, welcher WP Ordner immer beschreibbar ist. Ich habe die CSS-Dateierstellung ursprünglich zu themename/css/ dir hinzugefügt, aber seit WP das Thema beim Update löscht, ist dies ein Problem geworden.

Was ist Ihrer Meinung nach der beste Weg, dies zu erreichen, und was ist der sicherste beschreibbare WP -Ordner, den ich für diese Funktion verwenden könnte?

6
Benn

Der beste Ort ist das Verzeichnis uploads - es kann vom Server beschrieben werden und es ist das defacto-Verzeichnis zum Speichern aller vom Benutzer erstellten/hochgeladenen Dateien:

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

Das einzige Verzeichnis mit garantiertem Schreibzugriff ist das Upload-Verzeichnis. Alles andere könnte geschützt sein.

Heutzutage stellen wir Sites mit Composer bereit, behalten die Versionskontrolle bei und erstellen mit jeder Bereitstellung völlig neue Sites, um die bereitgestellte Site zurücksetzen zu können. Das bedeutet, dass das Verzeichnis bei jedem Deployment komplett neu erstellt wird.

Verwenden Sie das Upload-Verzeichnis, wenn Sie Dateien schreiben müssen, da dies das einzige ist, das aufbewahrt wird (außerhalb der anderen Verzeichnisse).

4
fuxia

Ein alternativer Ansatz besteht darin, eine PHP -Datei zu haben, die die Theme-Optionen abruft und stattdessen das CSS ausgibt und dieses direkt in die Warteschlange stellt. z.B.

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

Dies mag auf den ersten Blick seltsam erscheinen, aber da das eigentliche Schreiben einer neuen Datei über das Dateisystem WP erfolgen sollte, um die richtigen Besitzer-/Gruppenberechtigungen zu erhalten, ist dies eine Möglichkeit, um dieses Problem zu umgehen.

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

An dieser Stelle müssen Sie alle anderen wp-includes-Dateien einbinden, die Sie zum Abrufen der Designoptionen benötigen. Diese können je nach dem, wie Sie diese speichern, variieren. (Sie müssen wahrscheinlich mehr hinzufügen, damit keine schwerwiegenden Fehler auftreten.) ZB.

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

Dann einfach die CSS-Optionen ausgeben ... zB.

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

Ich denke, der beste Ort zum Schreiben ist das Hinzufügen eines Ordners im Ordner wp-content. Hier können Sie Ihre CSS-Dateien schreiben, ohne dass diese überschrieben werden, wenn Sie ein Theme-Update oder ein WP-Update haben.

0