Đổi tên thư mục UPLOADS với WP_CONTENT_DIR tùy chỉnh


7

Với mục đích kiểm soát phiên bản, khách hàng của chúng tôi có ứng dụng WordPress với cấu trúc thư mục như thế này:

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

Trong wp-config.php:

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

Bây giờ, cô muốn đổi tên tất cả các thư mục WordPress mặc định trong thư mục ứng dụng.

Với pluginsthemeschúng ta có thể làm điều đó một cách dễ dàng bằng cách sử dụng WP_PLUGIN_DIRregister_theme_directory () . Nhưng, bằng cách nào đó, không dễ để đổi tên uploadsthư mục.

Tôi đã thử nhiều sửa đổi với UPLOADShằng số, nhưng không thể giúp được vì thư mục tải lên tùy chỉnh luôn được tạo trong WordPressthư mục.

Có cách nào để khắc phục vấn đề này không?

Câu trả lời:


5

Sau khi đào xung quanh, tôi đã kết thúc bằng việc sử dụng upload_dirbộ lọc.

Đây là những gì tôi đã cố gắng trong functions.phpsự thay đổi uploadsđể media. Hy vọng nó cũng có thể giúp được ai đó :)

 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;
 });

Rất cám ơn @gmazzap về các hướng dẫn và đề xuất về upload_dirbộ lọc!


1
+1 nhưng một lưu ý, tôi ghét kết hợp một phần vì nó có thể kết thúc với kết quả không mong muốn (điều gì về trang web everybodecandouploads ?;)) Vì vậy tôi sẽ nói rằng để an toàn, tốt hơn là nên thay thế ngay cả khi mã dài hơn , ví dụ thay thế site_url(/wp-content/uploads)bằngsite_url(/wp-content/media)
Mark Kaplun

4

Nếu bạn nhìn vào nguồn của _wp_upload_dir, bạn sẽ thấy:

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

Vì vậy, UPLOADSchỉ có thể được sử dụng để xác định một bộ mã hóa liên quan đến ABSPATH, mà tôi đoán là /WordPressthư mục trong thiết lập của bạn.

Trong cùng một chức năng, bạn có thể thấy rằng nếu get_option('upload_path')get_option('upload_url_path')trống, đường dẫn và URL của thư mục tải lên được đặt thành tương ứng WP_CONTENT_DIR.'/uploads'WP_CONTENT_URL.'/uploads'sẽ hoàn toàn tốt cho bạn, miễn là bạn xác định WP_CONTENT_DIRWP_CONTENT_URLthích trong OP.

Nếu bạn hoàn toàn không xác định UPLOADSvà thư mục tải lên vẫn chưa được giải quyết /app/uploads, rất có thể cơ sở dữ liệu của bạn chứa một số giá trị 'upload_path''upload_url_path'tùy chọn.

Bạn có 2 khả năng:

  • xóa các tùy chọn đó
  • sử dụng "pre_option_{$option}"các bộ lọc để buộc get_option()trả về một cái gì đó trống cho các tùy chọn đó (nhưng không falsehoặc các bộ lọc sẽ bị bỏ qua).

Đối với khả năng thứ hai, mã có thể là một cái gì đó như thế này:

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

Với mã ở trên, và không có bất kỳ UPLOADShằng số nào được xác định, miễn là bạn xác định WP_CONTENT_DIRWP_CONTENT_URL, thư mục tải lên phải được giải quyết chính xác.

Nếu điều đó không xảy ra, chẳng hạn, phải có một cái gì đó hoạt động trên một số bộ lọc upload_dir.


Cảm ơn bạn! Nếu tôi không xác định UPLOADS, app/uploadsđược tạo bình thường miễn là tôi xác định WP_CONTENT_DIRWP_CONTENT_URL. upload_pathupload_url_pathlà các chuỗi trống trong cơ sở dữ liệu theo mặc định và không có sửa đổi bằng upload_dirbộ lọc. Nhưng tôi vẫn không thể đổi tên app/uploadsthành một cái gì đó như app/custom.
SarahCoding
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.