wake-up-neo.net

Benennen Sie den UPLOADS-Ordner mit benutzerdefiniertem WP_CONTENT_DIR um

Für die Versionskontrolle hat unser Client eine WordPress-App mit einer Verzeichnisstruktur wie dieser:

.
|_____app
|  |_____themes
|  |_____plugins
|  |_____uploads
|_____index.php
|_____WordPress
|_____wp-config.php

In wp-config.php:

define('WP_CONTENT_DIR', __DIR__ . '/app');
define('WP_CONTENT_URL', WP_HOME . '/app');

Jetzt möchte sie alle Standard-WordPress-Ordner im App-Verzeichnis umbenennen.

Mit plugins und themes können wir dies einfach tun, indem wir WP_PLUGIN_DIR und register_theme_directory () verwenden. Aber irgendwie ist es nicht einfach, den Ordner uploads umzubenennen.

Ich habe viele Änderungen mit der Konstante UPLOADS versucht, aber es kann nicht helfen, da der Ordner für benutzerdefinierte Uploads immer im Verzeichnis WordPress erstellt wird.

Gibt es Möglichkeiten, dieses Problem zu umgehen?

7
MinhTri

Nachdem ich mich umgegraben hatte, endete ich mit der Verwendung von upload_dir filter.

Hier ist, was ich in functions.php versucht habe, uploads in media zu ändern. Hoffe es kann auch jemandem helfen :)

 add_filter('upload_dir', function($uploads)
 {
     $custom = [];

     foreach ($uploads as $key => $value) {
         if ( false !== strpos($value, '/app/uploads') ) {
             $custom[$key] = str_replace('/app/uploads', '/app/media', $value);
         } else {
             $custom[$key] = $value;
         }
     }

     return $custom;
 });

Vielen Dank an @gmazzap für die Richtlinien und den Vorschlag zum upload_dir filter!

5
MinhTri

Wenn Sie sich die Quelle von _wp_upload_dir ansehen, werden Sie sehen:

if (defined('UPLOADS') && ! (is_multisite() && get_site_option('ms_files_rewriting'))) {
    $dir = ABSPATH.UPLOADS;
    $url = trailingslashit($siteurl).UPLOADS;
}

UPLOADS kann also nur verwendet werden, um einen Foder relativ zu ABSPATH zu definieren, der in Ihrem Setup vermutlich der Ordner /WordPress ist.

In der gleichen Funktion können Sie sehen, dass, wenn get_option('upload_path') und get_option('upload_url_path') leer sind, der Pfad und die URL des Upload-Ordners auf WP_CONTENT_DIR.'/uploads' bzw. WP_CONTENT_URL.'/uploads' eingestellt sind, was für Sie völlig in Ordnung sein sollte, solange Sie WP_CONTENT_DIR und WP_CONTENT_URL wie definieren in OP.

Wenn Sie nicht UPLOADS definieren und der Upload-Ordner immer noch nicht in /app/uploads aufgelöst ist, enthält Ihre Datenbank wahrscheinlich einige value für 'upload_path'- und 'upload_url_path' -Optionen.

Sie haben 2 Möglichkeiten:

  • löschen Sie diese Optionen
  • verwenden Sie "pre_option_{$option}" filters, um get_option() zu zwingen, für diese Optionen etwas Leeres zurückzugeben (nicht jedoch false, da die Filter sonst ignoriert werden).

Für die zweite Möglichkeit könnte der Code etwa so lauten:

add_filter('pre_option_upload_path', '__return_empty_string');
add_filter('pre_option_upload_url_path', '__return_empty_string');

Wenn der obige Code vorhanden ist und keine UPLOADS-Konstante definiert ist, sollte der Upload-Ordner korrekt aufgelöst werden, solange Sie WP_CONTENT_DIR und WP_CONTENT_URL definieren.

Geschieht dies nicht, muss es etwas geben, das auf some filter einwirkt, zum Beispiel upload_dir .

4
gmazzap