사용자 정의 게시물 유형을 인스턴스화하는 플러그인을 작성 중입니다 (다른 것들 중에서도). 멀티 사이트 플러그인이며 mu-plugins 디렉토리 에 있습니다 .
이 상황에서 flush_rewrite_rules () 를 처리하는 가장 좋은 방법은 무엇입니까 ? ‘정상적인’플러그인의 경우 활성화 훅 에서이 작업을 수행합니다.이 훅은 사용할 수 없으므로 필수 플러그인에는 사용할 수 없습니다.
이것은 맞춤 게시물 유형을 등록한 후 “일회성”이벤트이므로 CPT를 등록하는 클래스에서 이와 같은 작업을 수행하는 것이 좋습니다.
private function check_flush_my_CPT() {
global $wp_rewrite;
if ( !get_option('my_plugin_firstrun') ) {
$wp_rewrite->init();
$wp_rewrite->flush_rules(true);
update_option('my_plugin_firstrun', 'yes');
}
}
public function register_my_CPT() {
// do all the CPT setup steps for the $args array...
register_post_type('my_CPT', $args);
$this->check_flush_my_CPT();
}
add_action( 'init', array(&$this, 'register_my_CPT' ) );
따라서 CPT 등록은 모든 ‘초기’작업마다 발생하지만이 권한이 있으면 다시 쓰기 규칙 플러시가 한 번만 발생합니다. 이제까지 .
내가 올바른 길을 가고 있습니까?
(편집) : 방금 시도했습니다. 내 CPT에서 404 찾을 수 없음 오류가 발생하여 다시 쓰기 규칙이 작동하지 않습니다.
(편집 # 2) :이 질문에 표시된 것처럼 전역 변수에 액세스하기위한 솔루션을 시도했습니다 . 다중 사이트에서 다시 쓰기 규칙을 안정적으로 플러시하는 방법은 무엇입니까? -이것을 보여주기 위해 위의 코드 예제를 업데이트 할 것입니다. 불행히도 CPT를로드하려고 할 때 여전히 404 오류가 발생합니다. 다시 쓰기 규칙이 데이터베이스에 저장되어 있고 사용되지 않는 것 같습니다. 나는 길을 잃었다.
답변
이 flush_rewrite_rules
함수는 테마 또는 플러그인을 기반으로하는 플러그인과 같은 일부 컨텍스트에서 신뢰할 수 있지만 작동하는지 확실하지 않습니다.mu-plugin
내 진술은 WordPress가 다음과 같이 초기화되었다는 사실에 근거합니다.
- 부르는
wp-settings.php
파일을 do_action( 'muplugins_loaded' );
후크를 호출하면 플러그인이 초기화됩니다.- 전화
$GLOBALS['wp_rewrite'] = new WP_Rewrite();
여기 방법은flush_rules
지금부터 초기화로 볼 수 있습니다 do_action( 'setup_theme' );
이 후크에서flush_rewrite_rules
의지가 작동 하는 모든 돈을 걸었 습니다.
해결책?
개인적으로 rewrite_rules 옵션을 확실하게 삭제했습니다.
delete_option('rewrite_rules');
또는
update_option('rewrite_rules', '' );
워드 프레스가 부족할 때마다 rewrite_rules
다시 빌드 할 것입니다. 이것도 flush_rules
방법입니다.
WordPress 실행 흐름에는 이와 같은 기능을 사용할 수없는 지점이 있습니다. WordPress의 핵심 에서도이 진술을 발견했습니다.
// Rewrite rules can't be flushed during switch to blog.
delete_option( 'rewrite_rules' );
유일한 문제는 성능 일 것입니다. 모든 요청에 대해이 작업을 수행하지 마십시오. 보시다시피 첫 번째 호출에서만 플러시하고 싶습니다. 이것은 좋습니다.
추신 : 나는 그런 자체 프로모션 팬이 아니지만 오래 전에이 기사 를 작성 했으며 여전히 이것에 대해 서 있다고 생각합니다.
답변
mu-plugin에 옵션이있는 경우 업데이트 후 즉시 플러시를 배치합니다.
update_option( 'my_options', $values );
// Flush rules after install
flush_rewrite_rules();