Tambahkan konstanta Jaringan tambahan ke wp-config.php secara dinamis

10

Saat memulai dengan pemasangan Jaringan baru, langkah pertama adalah instalasi satu situs yang memiliki satu baris tambahan dalam wp-config.phpfile:

define( 'WP_ALLOW_MULTISITE', true );

Setelah itu kita harus pergi ke Tools > Network Setup, masukkan beberapa detail seperti nama jaringan dan email super admin dan akhirnya tekan tombol untuk menjalankan pengaturan.

Langkah selanjutnya muncul sebenarnya adalah dua langkah:

  1. Tambahkan konstanta tambahan ke wp-config.phpfile Anda

    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. Tambahkan beberapa aturan ke .htaccessfile Anda .

Karena saya tidak melakukan instalasi satu situs (tidak ada alasan untuk itu lagi), saya ingin menambahkan konstanta tersebut secara dinamis ke wp-config.phpfile saya :

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

Jadi saya tidak harus pergi ke wp-config.phpsetiap waktu dan mengeditnya lagi.

Hal pertama yang muncul di pikiran saya adalah untuk memeriksa DB untuk {$wpdb->prefix}sitemetatabel, tetapi saya tidak ingin melakukan kueri tambahan pada setiap beban situs. Hal ke - 2 yang saya pikirkan adalah memeriksa apakah yang blogs.dirsudah ada, tapi bukan itu masalahnya.

Pertanyaan: Bagaimana saya bisa menunjukkan bahwa saya sudah melewati langkah pertama pengaturan jaringan dengan cara yang tidak memiliki overhead besar atau menurunkan kinerja.

kaisar
sumber
2
Anda tidak boleh mencoba mengotomatiskan semuanya: i.imgur.com/OoF9Md7.png
Ünsal Korkmaz
1
sebenarnya sulit dipercaya prosesnya masih sama sementara semakin banyak instalasi WP menjadi multisite
JMau
@ ÜnsalKorkmaz Jika Anda telah melihat pengaturan konfigurasi saya, Anda akan mengerti bahwa ini hanya satu langkah maju. Hal berikutnya: Grunt wp-configgenerator.
kaiser
Saya tidak mengerti mengapa Anda perlu memeriksa apakah ada kondisi untuk setiap pemuatan halaman dan kemudian mendefinisikan konstanta. Anda menjalankan set-up multisite atau tidak. Jika Anda berbicara tentang mengotomatisasi pengaturan WordPress, Anda dapat melihat sesuatu seperti YeoPress github.com/wesleytodd/YeoPress
kingkool68
@ kingkool68 Mudah. Karena saya tidak ingin batalkan komentar / komentar konstanta itu setiap kali saya memasang jaringan. Ini bukan overhead dan langkah itu tidak perlu. Dan tidak, saya tidak berbicara tentang mengotomatisasi pengaturan WP. Btw: Yeoman menggunakan Grunt untuk tugas (yang saya sebutkan di atas).
kaiser

Jawaban:

1

Saya belum menguji ini, tetapi jika Anda perlu menemukan solusi seperti itu, saya mungkin akan mencoba melakukannya dengan cara berikut dengan menambahkan skrip ke dalam if ( SOME_CHECK_IF_STEP-1_WAS_PASSED )kondisi yang Anda jelaskan di atas, yang akan:

  • periksa DB untuk {$wpdb->prefix}sitemetatabel;
  • jika tidak ada -> return false;
  • jika memang ada -> tambahkan tugas WP cron untuk menulis ulang wp-config.php-> mengembalikan true.

Pekerjaan WP cron akan menulis ulang wp-config.phpuntuk menghilangkan cek sepenuhnya.

Dengan cara ini, Anda hanya memiliki permintaan DB tambahan sampai jaringan diatur dan tugas cron melakukan keajaibannya.

Perhatikan bahwa ini sepadan dengan usaha, meskipun ...;)

Alain Schlesser
sumber
BTW, skrip dapat mengubah wp-config.phpfile secara langsung, tapi saya kira itu akan dikunci pada saat itu ...
Alain Schlesser
Ide pekerjaan cron itu lucu :) Terima kasih untuk itu. Btw, Anda dapat mengedit jawaban Anda.
kaiser
-1

Periksa wp-admin/network.phpdan wp-admin/includes/schema.phpfile. Anda dapat membuat kondisi berdasarkan WP_INSTALLING_NETWORK

Memperbarui:

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. letakkan ini di folder mu-plugins.
  2. install wp segar
  3. buka panel admin
  4. klik ke alat
  5. klik untuk pengaturan jaringan
  6. jalankan pengaturan
  7. ???
  8. keuntungan!!!

masukkan deskripsi gambar di sini

Ünsal Korkmaz
sumber
Saya sudah memeriksanya. Intinya adalah yang wp-load.phpmenarik wp-config.phpsebelumnya, jadi WP_INSTALLING_NETWORKtidak akan ditentukan. Tetapi bahkan jika itu akan tersedia, itu hanya tersedia selama pengaturan jaringan. Apa yang akan saya lakukan untuk meninggalkan konstanta setelah instalasi telah berjalan?
kaiser
Tidak .. Anda harus menggunakan fungsi untuk menjalankan satu kali dan menulis definisi Anda ke file wp-config.php sekali. Anda dapat berpikir itu seperti register_activation_hook
Ünsal Korkmaz
index.phptarikan ./wp-blog-header.php), yang kemudian menarik wp-load.phpdan dari sana wp-config.phpdisebut. Tinjauan umum dapat ditemukan di sini . admin.phpsendiri dipanggil sebelum setup.phpdan network.php(dan memanggil wp-load.phpdirinya sendiri di awal), jadi konfigurasi sudah berjalan.
kaiser
Dan tanpa WP_INSTALLING_NETWORKmendapat define()memeriksa apakah sudah defined(), saya akan membuat di Fatal Errorsana. Tolong buktikan saya salah dan berikan tes. :)
kaiser
2
Tidak Ünsal, saya tidak. Saya bahkan mengabaikan fakta bahwa saya bisa menganggap komik di luar topik sebagai trolling atau hanya kasar. Saya mencari solusi. Titik. Tetapi memiliki wp-config.phpfile yang dapat ditulis adalah risiko keamanan. Pertimbangkan bahwa Anda memiliki semua detail penting di sana. Saya menunjukkan kepada Anda bahwa tidak mungkin ini bekerja (tanpa memiliki file konfigurasi yang dapat ditulisi). Apa yang saya cari adalah indikator (yang tidak memperlambat sistem) yang dapat saya periksa dan gunakan sebagai saklar. Segala sesuatu yang lain tidak akan berfungsi.
kaiser
-1

Jika setup Anda sama setiap kali (instalasi subdomain), maka Anda mungkin dapat menempelkan seluruh chunk di langkah pertama Anda:

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

Geoff
sumber
Seperti yang dapat Anda lihat dalam pertanyaan, saya cukup menyadari konstanta yang dibutuhkan. Apa yang saya cari adalah indikator yang andal jika setup sudah melewati langkah 1, tidak ada yang lain. Silakan lihat pertanyaan aktual yang disorot di bagian bawah. Terima kasih atas usaha Anda yang keras.
kaiser
Jawaban saya adalah untuk menantang apakah Anda bahkan memerlukan indikator sama sekali, tetapi lebih bergantung pada variabel server untuk melayani DOMAIN_CURRENT_SITEkonstanta yang benar yang diberikan WordPress kepada Anda setelah menyelesaikan pengaturan internal.
Geoff