web-dev-qa-db-ja.com

flush_rewrite_rules()がプラグインの有効化に機能しない

Projectという名前のカスタム投稿タイプを作成するための単純なプラグインを作成することを試みていますが、アクティブ化時に書き換え規則がフラッシュされないという問題があります。

私はこの機能を持つメインのプラグインファイルを持っています:

register_activation_hook( __FILE__, 'Project_Custom_Post_Type::activate' );

それから私のクラス内で私はこれを持っています:

public function activate() {
  flush_rewrite_rules();
}

私のクラスは以下の構成を持ちます。

public function __construct() {
  add_action( 'init', array( $this, 'register_post_type' ), 0 );
}

なぜうまくいかないのかわかりませんか。私の無効化フラッシュはうまくいきます。

2
Philip Benton

あなたの文字列はコールバックとして読み込まれません。あなたは配列を渡すべきです:

$pcpt = new Project_Custom_Post_Type;
register_activation_hook( __FILE__, array( $pcpt, 'activate' ) );

init - プラグインのアクティブ化の前に行われるので、あなたのクラスからのコールバックは実行されません。

1
fuxia

起動時には、 "init"アクションはすでに実行されています。そのため、フラッシュは実際には問題なく行われていますが、フラッシュが行われる前に投稿タイプは登録されていません。書き換えルールをフラッシュする前に、投稿タイプをアクティブ化関数に登録するコードを追加してください。

また、はい、toschoが指摘したように、アクティベーションフックの呼び出しは正しくありません。

1
Otto