Thêm các hằng mạng bổ sung vào wp-config.php một cách linh hoạt


10

Khi bắt đầu với cài đặt Mạng mới, bước đầu tiên là cài đặt một trang có thêm một dòng trong wp-config.phptệp:

define( 'WP_ALLOW_MULTISITE', true );

Sau đó, chúng ta phải đi đến Tools > Network Setup, nhập một số chi tiết như tên mạng và email siêu quản trị viên và cuối cùng nhấn nút để chạy thiết lập.

Bước tiếp theo bật lên thực sự là hai bước:

  1. Thêm các hằng số bổ sung vào wp-config.phptập tin của bạn

    define( 'MULTISITE', true );
    define( 'SUBDOMAIN_INSTALL', true );
    define( 'DOMAIN_CURRENT_SITE', 'example.com' );
    define( 'PATH_CURRENT_SITE', '/' );
    define( 'SITE_ID_CURRENT_SITE', true );
    define( 'BLOG_ID_CURRENT_SITE', true );
    
  2. Thêm một số quy tắc vào .htaccesstập tin của bạn .

Vì tôi không cài đặt một trang web (không có lý do nào nữa), tôi muốn tự động thêm các hằng số đó vào wp-config.phptệp của mình :

define( 'WP_ALLOW_MULTISITE', true );
if ( SOME_CHECK_IF_STEP-1_WAS_PASSED )
{
    define( 'MULTISITE', true );
    define( 'SUBDOMAIN_INSTALL', true );
    define( 'DOMAIN_CURRENT_SITE', 'example.com' );
    define( 'PATH_CURRENT_SITE', '/' );
    define( 'SITE_ID_CURRENT_SITE', true );
    define( 'BLOG_ID_CURRENT_SITE', true );
}

Vì vậy, tôi không phải đi đến wp-config.phpmỗi lần và chỉnh sửa lại.

Điều đầu tiên tôi nghĩ đến là kiểm tra DB cho {$wpdb->prefix}sitemetabảng, nhưng tôi không muốn thực hiện một truy vấn bổ sung trên mỗi lần tải trang. Điều thứ hai tôi nghĩ đến là kiểm tra xem blogs.dirđã tồn tại chưa, nhưng thực tế không phải vậy.

Câu hỏi: Làm thế nào tôi có thể chỉ ra rằng tôi đã vượt qua bước đầu tiên của thiết lập mạng theo cách không có chi phí lớn hoặc giảm hiệu suất.


2
Bạn không nên cố gắng tự động hóa mọi thứ: i.imgur.com/OoF9Md7.png
Ünsal Korkmaz

1
Thật không thể tin được quá trình này vẫn như vậy trong khi ngày càng nhiều cài đặt WP trở nên đa dạng
JMau

@ NsalKorkmaz Nếu bạn đã thấy thiết lập cấu hình của tôi, bạn sẽ hiểu rằng đây chỉ là một bước nữa. Điều tiếp theo: wp-configMáy phát điện Grunt .
kaiser

Tôi không thể hiểu tại sao bạn cần kiểm tra xem có tồn tại một điều kiện cho mỗi lần tải trang không và sau đó xác định các hằng số. Bạn đang chạy một thiết lập nhiều trang hoặc bạn không. Nếu bạn đang nói về việc tự động hóa thiết lập WordPress, bạn có thể xem xét một cái gì đó như YeoPress github.com/wesleytodd/YeoPress
kingkool68

@ kingkool68 Dễ dàng. Bởi vì tôi không muốn bỏ ghi chú / nhận xét các hằng số đó mỗi khi tôi thiết lập cài đặt mạng. Nó không có phí và bước đơn giản là không cần thiết. Và không, tôi không nói về việc tự động hóa thiết lập WP. Btw: Yeoman sử dụng Grunt cho các nhiệm vụ (mà tôi đã đề cập ở trên).
kaiser

Câu trả lời:


1

Tôi chưa thử nghiệm điều này, nhưng nếu bạn cần tìm một giải pháp như vậy, có lẽ tôi sẽ thử thực hiện theo cách sau bằng cách thêm một tập lệnh vào if ( SOME_CHECK_IF_STEP-1_WAS_PASSED )điều kiện bạn đã mô tả ở trên, điều đó sẽ:

  • kiểm tra DB cho {$wpdb->prefix}sitemetabảng;
  • nếu nó không tồn tại -> trả về false;
  • nếu nó tồn tại -> thêm một công việc cron WP để viết lại wp-config.php-> trả về true.

Công việc cron WP sẽ viết lại wp-config.phpđể loại bỏ hoàn toàn kiểm tra.

Theo cách này, bạn chỉ có một yêu cầu DB bổ sung cho đến khi mạng được thiết lập và công việc định kỳ đã làm điều kỳ diệu của nó.

Lưu ý rằng điều này đáng để nỗ lực, mặc dù ...;)


BTW, tập lệnh có thể thay đổi wp-config.phptập tin trực tiếp, nhưng tôi cho rằng nó sẽ bị khóa vào thời điểm đó ...
Alain Schlesser

Đó là ý tưởng công việc cron là buồn cười :) Cảm ơn vì điều đó. Btw, bạn có thể chỉnh sửa câu trả lời của bạn.
kaiser

-1

Kiểm tra wp-admin/network.phpwp-admin/includes/schema.phpcác tập tin. Bạn có thể tạo một điều kiện dựa trên WP_INSTALLING_NETWORK

Cập nhật:

if (is_admin()){
    /* First Step */
    if (!defined( 'WP_ALLOW_MULTISITE')){
            $current_wp_config = file_get_contents(ABSPATH . 'wp-config.php');

            $my_defines = "/* First we put WP_ALLOW_MULTISITE  */\r\n" .
                    "define('WP_ALLOW_MULTISITE', true); \r\n";

            $current_wp_config = str_replace("/* That's all, stop editing", $my_defines . "/* That's all, stop editing", $current_wp_config);       
            file_put_contents(ABSPATH . 'wp-config.php', $current_wp_config);   
    }   
    /* Second Step */
    if (!defined("WP_DEFINES_IMPORTED") && defined("WP_INSTALLING_NETWORK") && $_POST){
        $current_wp_config = file_get_contents(ABSPATH . 'wp-config.php');

        $my_defines = "/* Now we define */\r\n" .
            "define('WP_DEFINES_IMPORTED', true); \r\n" .
            "define('MULTISITE', true); \r\n".
            "define('SUBDOMAIN_INSTALL', true); \r\n".
            "define('DOMAIN_CURRENT_SITE', '". get_clean_basedomain() . "'); \r\n".
            "define('PATH_CURRENT_SITE', '". parse_url(  trailingslashit( get_option( 'home' ) ), PHP_URL_PATH ) . "'); \r\n".
            "define('SITE_ID_CURRENT_SITE', 1); \r\n".
            "define('BLOG_ID_CURRENT_SITE', 1); \r\n";

        $current_wp_config = str_replace("/* That's all, stop editing", $my_defines . "/* That's all, stop editing", $current_wp_config);       
        file_put_contents(ABSPATH . 'wp-config.php', $current_wp_config);   
    }
}
  1. đặt cái này vào thư mục mu-plugins.
  2. cài đặt wp mới
  3. đi đến bảng quản trị
  4. nhấp vào công cụ
  5. bấm vào để thiết lập mạng
  6. chạy thiết lập
  7. ???
  8. lợi nhuận!!!

nhập mô tả hình ảnh ở đây


Tôi đã kiểm tra điều đó. Điểm là wp-load.phpkéo vào wp-config.phpsớm hơn, vì vậy WP_INSTALLING_NETWORKsẽ không được xác định. Nhưng ngay cả khi nó có sẵn, nó chỉ khả dụng trong khi thiết lập mạng. Tôi sẽ làm gì để rời khỏi các hằng số sau khi cài đặt đã chạy?
kaiser

Không .. bạn nên sử dụng một hàm để thực thi một lần và ghi định nghĩa của bạn vào tệp wp-config.php một lần. Bạn có thể nghĩ nó giống như register_activation_hook
Ünsal Korkmaz

index.phpkéo ./wp-blog-header.php), sau đó kéo wp-load.phpvà từ đó wp-config.phpđược gọi là. Một cái nhìn tổng quan có thể được tìm thấy ở đây . admin.phpchính nó được gọi trước setup.phpnetwork.php(và wp-load.phptự gọi nó ở đầu), vì vậy cấu hình đã được chạy.
kaiser

Và như WP_INSTALLING_NETWORKđược nhận define()mà không cần kiểm tra nếu nó đã có defined(), tôi sẽ tạo ra một Fatal Errorở đó. Hãy chứng minh tôi sai và cho nó một bài kiểm tra. :)
kaiser

2
Không nsal, tôi không. Tôi thậm chí còn phớt lờ thực tế rằng tôi có thể lấy đoạn truyện tranh ngoài chủ đề ở trên là trolling hoặc chỉ thô lỗ. Tôi đang tìm kiếm một giải pháp. Giai đoạn = Stage. Nhưng có một wp-config.phptập tin có thể ghi là một rủi ro bảo mật. Hãy xem xét rằng bạn có tất cả các chi tiết quan trọng trong đó. Tôi đã cho bạn thấy rằng không có cách nào nó sẽ hoạt động (mà không có tệp cấu hình có thể ghi). Thứ tôi đang tìm kiếm là một chỉ báo (không làm chậm hệ thống) mà tôi có thể kiểm tra và sử dụng làm công tắc. Mọi thứ khác sẽ không hoạt động.
kaiser

-1

Nếu thiết lập của bạn giống nhau mỗi lần (cài đặt tên miền phụ), thì bạn có thể dán toàn bộ khối trong bước đầu tiên của mình:

define( 'MULTISITE', true ); define( 'SUBDOMAIN_INSTALL', true ); define( 'DOMAIN_CURRENT_SITE', $_SERVER[ 'HTTP_HOST' ] ); define( 'PATH_CURRENT_SITE', '/' ); define( 'SITE_ID_CURRENT_SITE', true ); define( 'BLOG_ID_CURRENT_SITE', true );


Như bạn có thể thấy trong câu hỏi, tôi khá biết về các hằng số cần thiết. Những gì tôi đang tìm kiếm là một chỉ báo đáng tin cậy nếu thiết lập đã qua bước 1, không có gì khác. Xin vui lòng xem câu hỏi thực tế nổi bật ở phía dưới. Cảm ơn những nỗ lực của bạn khó khăn.
kaiser

Câu trả lời của tôi là thách thức xem bạn thậm chí có cần chỉ báo hay không, mà chỉ dựa vào biến máy chủ để phục vụ DOMAIN_CURRENT_SITEhằng số chính xác mà WordPress cung cấp cho bạn sau khi hoàn tất thiết lập nội bộ.
Geoff
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.