동적으로 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 내 마음에 온 것은의 DB를 확인하는 것이었다 {$wpdb->prefix}sitemeta테이블,하지만 각 사이트의 부하에 추가 쿼리를하고 싶지 않아. 2 내가 생각 것은이 있는지 확인하는 것이 었습니다 blogs.dir이미 존재하지만, 그 사건 아니에요.

질문 : 오버 헤드가 크지 않거나 성능이 저하되지 않는 방식으로 네트워크 설정의 첫 단계를 이미 통과했음을 어떻게 알 수 있습니까 ?


2
당신은 모든 것을 자동화하려고 야해 : i.imgur.com/OoF9Md7.png
Ünsal KORKMAZ에게

1
그것은 점점 더 많은 WP 설치가 다중 될 때 프로세스가 여전히 동일 실제로 믿을 수
JMau

@ ÜnsalKorkmaz 구성 설정을 본 적이 있다면 이것이 한 단계 더 발전한 것임을 이해할 것입니다. 다음으로 그런트 wp-config생성기.
kaiser

페이지로드마다 조건이 있는지 확인한 다음 상수를 정의해야하는 이유를 이해할 수 없습니다. 다중 사이트 설정을 실행 중이거나 그렇지 않은 경우 당신은 워드 프레스 자동화에 대해 얘기하는 경우 설정을 업 당신은 YeoPress 같은으로 볼 수 github.com/wesleytodd/YeoPress
kingkool68

@ kingkool68 쉬운. 네트워크 설치를 설정할 때마다 해당 상수의 주석 처리를 제거하거나 주석 처리하고 싶지 않기 때문입니다. 오버 헤드가 없으며 단계는 불필요합니다. 그리고 아니요, WP 설정 자동화에 대해서는 이야기하지 않습니다. Btw : Yeoman은 위에서 언급 한 작업에 Grunt를 사용합니다.
카이저

답변:


1

나는 이것을 테스트하지는 않았지만 그러한 해결책을 찾아야한다면 if ( SOME_CHECK_IF_STEP-1_WAS_PASSED )위에서 설명한 조건에 스크립트를 추가하여 다음과 같은 방법으로 시도 할 것입니다.

  • {$wpdb->prefix}sitemeta테이블에 대한 DB를 확인하십시오 .
  • 존재하지 않으면-> false를 반환;
  • 존재하는 경우-> 다시 작성할 WP cron 작업 추가 wp-config.php-> true를 리턴하십시오.

WP cron 작업은 wp-config.php검사를 완전히 제거하기 위해를 다시 작성합니다 .

이 방법으로 네트워크가 설정되고 크론 작업이 마법을 발휘할 때까지 추가 DB 요청 만 가능합니다.

그러나 이것이 노력할만한 가치가 있는지 확인하십시오 ...;)


BTW, 스크립트 는 파일을 직접 변경할 wp-config.php 있지만 그 시점에서 파일이 잠겨 있다고 가정합니다.
Alain Schlesser

그 cron 직업 아이디어는 재미있다 :) 고마워. Btw, 당신은 당신의 답변을 편집 할 수 있습니다 .
kaiser

-1

검사 wp-admin/network.phpwp-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처음에는 자체 호출 ) 구성이 이미 실행 중입니다.
kaiser

그리고 이미 있는지 확인하지 않고 WP_INSTALLING_NETWORK얻을 define()수 있으므로 거기에 defined()만들 Fatal Error것입니다. 내가 틀렸다는 것을 증명하고 시험해주세요. :)
kaiser

2
아니, 난 아니야 나는 위의 주제를 벗어난 코믹 스트립을 트롤링이나 무례하게 찍을 수 있다는 사실을 무시하고 있습니다. 해결책을 찾고 있습니다. 기간. 그러나 쓰기 가능한 wp-config.php파일이 있으면 보안 위험이 있습니다. 거기에 모든 중요한 세부 사항이 있다고 생각하십시오. 쓰기 가능한 구성 파일이 없으면 이것이 작동하는 방법이 없다는 것을 보여주었습니다. 내가 찾고 있는 것은 확인하고 스위치로 사용할 수 있는 표시기 (시스템 속도를 늦추지 않음)입니다. 다른 모든 것이 작동하지 않습니다.
kaiser

-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가 제공 하는 올바른 상수 를 제공하기 위해 서버 변수에 의존합니다 .
Geoff
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.