バージョン管理の目的で、私たちのクライアントはこのようなディレクトリ構造を持つWordPressアプリを持っています。
.
|_____app
| |_____themes
| |_____plugins
| |_____uploads
|_____index.php
|_____WordPress
|_____wp-config.php
wp-config.php
内:
define('WP_CONTENT_DIR', __DIR__ . '/app');
define('WP_CONTENT_URL', WP_HOME . '/app');
今、彼女はアプリディレクトリ内のすべてのデフォルトのWordPressフォルダの名前を変更したいです。
plugins
とthemes
では、WP_PLUGIN_DIR
と register_theme_directory() を使うことで簡単にできます。しかし、どういうわけか、uploads
フォルダの名前を変更するのは簡単ではありません。
私はUPLOADS
定数を使って多くの修正を試みましたが、カスタムアップロードフォルダは常にWordPress
ディレクトリの中に作成されるため、役に立ちません。
この問題を回避する方法はありますか?
調べた後、私は upload_dir
filterを使用することになりました。
これがuploads
をmedia
に変更するためにfunctions.php
で試したものです。誰かに役立つことを願っています:)
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;
});
ガイドラインとupload_dir
フィルタに関する提案を寄せてくれた @gmazzap に感謝します。
_wp_upload_dir
のソースを見ると、次のようになります。
if (defined('UPLOADS') && ! (is_multisite() && get_site_option('ms_files_rewriting'))) {
$dir = ABSPATH.UPLOADS;
$url = trailingslashit($siteurl).UPLOADS;
}
そのため、UPLOADS
はABSPATH
に対する相対的なfoderを定義するためにのみ使用できます。これはあなたの設定の/WordPress
フォルダであると思います。
同じ関数で、get_option('upload_path')
とget_option('upload_url_path')
が空の場合、WP_CONTENT_DIR.'/uploads'
とWP_CONTENT_URL.'/uploads'
を定義する限り、アップロードフォルダのパスとURLがそれぞれWP_CONTENT_DIR
とWP_CONTENT_URL
に設定されていることがわかります。 OPで。
UPLOADS
at allを定義せず、uploadsフォルダがまだ/app/uploads
に解決されない場合、データベースに'upload_path'
および'upload_url_path'
オプションの some 値が含まれている可能性があります。
2つの可能性があります。
"pre_option_{$option}"
filtersを使用して、これらのオプションに対してget_option()
に空の値を強制的に返すようにします(ただし、false
ではなく、フィルターは無視されます)。2番目の可能性としては、コードは次のようになります。
add_filter('pre_option_upload_path', '__return_empty_string');
add_filter('pre_option_upload_url_path', '__return_empty_string');
WP_CONTENT_DIR
とWP_CONTENT_URL
を定義している限り、上記のコードを配置し、UPLOADS
定数を定義せずに、uploadsフォルダを正しく解決する必要があります。
それが起こらないなら、 some filterに作用する何か、例えば upload_dir
がなければなりません。