เพิ่มค่าคงที่เครือข่ายเพิ่มเติมให้กับ wp-config.php แบบไดนามิก


10

เมื่อเริ่มต้นด้วยการติดตั้งเครือข่ายใหม่ขั้นตอนแรกคือการติดตั้งไซต์เดียวที่มีหนึ่งบรรทัดเพิ่มเติมในwp-config.phpไฟล์:

define( 'WP_ALLOW_MULTISITE', true );

หลังจากนั้นเราต้องไปที่ให้Tools > Network Setupป้อนรายละเอียดบางอย่างเช่นชื่อเครือข่ายและอีเมลสุดยอดของผู้ดูแลระบบและในที่สุดก็กดปุ่มเพื่อเรียกใช้การตั้งค่า

ขั้นตอนถัดไปที่ปรากฏขึ้นเป็นจริงสองขั้นตอน:

  1. เพิ่มค่าคงที่เพิ่มเติมลงในwp-config.phpไฟล์ของคุณ

    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. เพิ่มกฎบางอย่างลงใน.htaccessไฟล์ของคุณ

เนื่องจากฉันไม่ได้ติดตั้งเว็บไซต์เดียว (ไม่มีเหตุผลอีกต่อไป) ฉันต้องการเพิ่มค่าคงที่เหล่านั้นในwp-config.phpไฟล์ของฉันแบบไดนามิก:

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

ดังนั้นฉันไม่ต้องไปที่wp-config.phpแต่ละครั้งและแก้ไขอีกครั้ง

1สิ่งที่มาในใจของฉันคือการตรวจสอบฐานข้อมูลสำหรับ{$wpdb->prefix}sitemetaตาราง แต่ฉันไม่ต้องการที่จะทำการสอบถามเพิ่มเติมเกี่ยวกับการโหลดแต่ละเว็บไซต์ 2สิ่งที่ฉันคิดว่าการที่จะตรวจสอบว่าblogs.dirมีอยู่แล้ว แต่ที่ไม่ได้กรณีที่

คำถาม:ฉันจะระบุได้อย่างไรว่าฉันผ่านขั้นตอนแรกของการตั้งค่าเครือข่ายในลักษณะที่ไม่มีค่าใช้จ่ายมากหรือประสิทธิภาพลดลง


2
คุณไม่ควรพยายามทำให้ทุกอย่างเป็นอัตโนมัติ: i.imgur.com/OoF9Md7.png
Ünsal Korkmaz

1
เป็นจริงไม่น่าเชื่อว่ากระบวนการจะยังคงเหมือนเดิมในขณะที่การติดตั้ง WP มากขึ้นเรื่อย ๆ กลายเป็นหลายไซต์
JMau

@ ÜnsalKorkmazหากคุณเห็นการตั้งค่าการกำหนดค่าของฉันคุณจะเข้าใจว่านี่เป็นอีกขั้นตอนเดียว สิ่งต่อไป: wp-configเครื่องกำเนิดเสียงฮึดฮัด
ไกเซอร์

ฉันไม่เข้าใจว่าทำไมคุณต้องตรวจสอบว่ามีเงื่อนไขสำหรับการโหลดหน้าเว็บทุกครั้งหรือไม่แล้วกำหนดค่าคงที่ คุณกำลังใช้งานการตั้งค่าหลายไซต์หรือไม่ หากคุณกำลังพูดถึงการตั้งค่า WordPress อัตโนมัติคุณสามารถดูได้จาก YeoPress github.com/wesleytodd/YeoPress
kingkool68

@ kingkool68 ง่าย เพราะฉันไม่ต้องการแสดงข้อคิดเห็น / แสดงความคิดเห็นค่าคงที่เหล่านั้นทุกครั้งที่ฉันติดตั้งเครือข่าย ไม่มีค่าใช้จ่ายและขั้นตอนก็ไม่จำเป็น และไม่ฉันไม่ได้พูดถึงการตั้งค่า WP อัตโนมัติ Btw: Yeoman ใช้ Grunt สำหรับงาน (ซึ่งฉันได้กล่าวไว้ข้างต้น)
ไกเซอร์

คำตอบ:


1

ฉันยังไม่ได้ทดสอบสิ่งนี้ แต่หากคุณต้องการค้นหาวิธีแก้ปัญหาดังกล่าวฉันอาจลองทำด้วยวิธีต่อไปนี้โดยเพิ่มสคริปต์ลงในif ( SOME_CHECK_IF_STEP-1_WAS_PASSED )เงื่อนไขที่คุณได้อธิบายไว้ข้างต้นนั่นคือ:

  • ตรวจสอบฐานข้อมูลสำหรับ{$wpdb->prefix}sitemetaตาราง;
  • ถ้าไม่มี -> กลับเท็จ;
  • ถ้ามันมีอยู่ -> เพิ่มงาน WP cron เพื่อเขียนใหม่wp-config.php-> คืนค่าจริง

งาน WP cron จะเขียนใหม่wp-config.phpเพื่อกำจัดการตรวจสอบอย่างสมบูรณ์

ด้วยวิธีนี้คุณจะมีการร้องขอ DB เพิ่มเติมจนกว่าเครือข่ายจะถูกตั้งค่าและงาน cron ทำมายากลของมัน

โปรดทราบว่านี่คุ้มค่ากับความพยายามแม้ว่า ... ;)


BTW สคริปต์สามารถเปลี่ยนwp-config.phpไฟล์โดยตรง แต่ฉันคิดว่ามันจะถูกล็อคที่จุดที่ ...
Alain Schlesser

ความคิดงาน cron นั้นเป็นเรื่องตลก :) ขอบคุณสำหรับสิ่งนั้น คุณสามารถแก้ไขคำตอบของคุณได้
ไกเซอร์

-1

ตรวจสอบwp-admin/network.phpและwp-admin/includes/schema.phpไฟล์ คุณสามารถสร้างเงื่อนไขตามWP_INSTALLING_NETWORK

ปรับปรุง:

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. นำสิ่งนี้ไปยังโฟลเดอร์ mu-plugins
  2. ติดตั้ง WP สด
  3. ไปที่แผงผู้ดูแลระบบ
  4. คลิกเพื่อเครื่องมือ
  5. คลิกเพื่อตั้งค่าเครือข่าย
  6. เรียกใช้การตั้งค่า
  7. ???
  8. กำไร!!!

ป้อนคำอธิบายรูปภาพที่นี่


ฉันตรวจสอบแล้ว จุดคือการwp-load.phpดึงwp-config.phpก่อนหน้านี้ดังนั้นWP_INSTALLING_NETWORKจะไม่ถูกกำหนด แต่แม้ว่าจะพร้อมใช้งาน แต่จะใช้ได้เฉพาะในระหว่างการตั้งค่าเครือข่าย ฉันจะทำอย่างไรเพื่อปล่อยให้ค่าคงที่หลังจากรันการติดตั้งแล้ว?
ไกเซอร์

ไม่ได้ .. คุณควรใช้ฟังก์ชั่นเพื่อเรียกใช้งานครั้งเดียวและเขียนคำจำกัดความของคุณไปยังไฟล์ wp-config.php หนึ่งครั้ง คุณสามารถคิดได้เหมือน register_activation_hook
Ünsal Korkmaz

index.phpดึง./wp-blog-header.php) ซึ่งจากนั้นจะดึงwp-load.phpและwp-config.phpเรียกว่า ภาพรวมสามารถพบได้ที่นี่ admin.phpตัวเองได้รับการเรียกก่อนsetup.phpและnetwork.php(และเรียกwp-load.phpตัวเองที่จุดเริ่มต้น) ดังนั้นการกำหนดค่าได้ทำงานแล้ว
ไกเซอร์

และอย่างที่WP_INSTALLING_NETWORKได้รับdefine()โดยไม่ตรวจสอบว่ามันมีอยู่แล้วdefined()ฉันจะสร้างFatal Errorมัน โปรดพิสูจน์ฉันผิดและทำการทดสอบ :)
ไกเซอร์

2
ไม่ใช่Ünsalฉันไม่ ฉันยังเพิกเฉยต่อความจริงที่ว่าฉันสามารถถอดการ์ตูนการ์ตูนนอกหัวข้อออกมาเพื่อหลอกหรือหยาบคายได้ ฉันกำลังค้นหาวิธีแก้ปัญหา ระยะเวลา แต่การมีwp-config.phpไฟล์ที่เขียนได้นั้นเป็นความเสี่ยงด้านความปลอดภัย พิจารณาว่าคุณมีรายละเอียดที่สำคัญทั้งหมดอยู่ในนั้น ฉันแสดงให้คุณเห็นว่าไม่มีทางที่มันจะใช้ได้ (โดยไม่ต้องมีไฟล์ปรับแต่งที่สามารถเขียนได้) สิ่งที่ฉันกำลังค้นหาคือตัวบ่งชี้ (ซึ่งไม่ทำให้ระบบช้าลง) ที่ฉันสามารถตรวจสอบและใช้เป็นสวิตช์ได้ ทุกอย่างอื่นจะไม่ทำงาน
ไกเซอร์

-1

หากการตั้งค่าของคุณเหมือนกันทุกครั้ง (การติดตั้งโดเมนย่อย) คุณอาจวางก้อนทั้งหมดในขั้นตอนแรกของคุณ:

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


อย่างที่คุณเห็นในคำถามฉันค่อนข้างตระหนักถึงค่าคงที่ที่ต้องการ สิ่งที่ฉันกำลังค้นหาคือตัวบ่งชี้ที่เชื่อถือได้หากการตั้งค่าผ่านไปแล้วขั้นตอนที่ 1 ไม่มีอะไรอื่นอีกแล้ว โปรดดูคำถามจริงที่ไฮไลต์ที่ด้านล่าง ขอบคุณสำหรับความพยายามของคุณ
ไกเซอร์

คำตอบของฉันคือการท้าทายว่าคุณต้องการตัวบ่งชี้เลยหรือไม่ แต่พึ่งพาตัวแปรเซิร์ฟเวอร์เพื่อให้บริการDOMAIN_CURRENT_SITEค่าคงที่ที่ WordPress ให้คุณหลังจากตั้งค่าภายในเสร็จสิ้น
เจฟฟ์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.