web-dev-qa-db-ja.com

add_rewrite_ruleが動作しない、rules配列に追加されない、なぜですか?

私は新しい書き換え規則を追加しようとしていますが、それは配列に追加されているようには見えません、そしてそれは確かに機能していません。

このURL、dult.dev/lists/games/destinyを取得して、/lists/games/のリストビュー(これで問題なく動作する)からその特定の投稿の単一の投稿ビューに移動しようとしています。私の書き換えルールは追加されていません。

add_action( 'init', 'add_rewrite_tags', 10, 0 );
function add_rewrite_tags() {
    global $wp_rewrite; // Global WP_Rewrite class object
    $wp_rewrite->flush_rules();
    add_rewrite_rule( 
        '^lists/([^/]*)/([^/]*)/?', 
        'index.php/lists=$matches[1]&post=$matches[2]', 
        'top' 
    );
    print_r( $wp_rewrite->rewrite_rules() );
}

$wp_rewrite->rewrite_rules()を呼び出すときに、今作成したルールはありません。私はそれらを一握りの異なる方法でフラッシュしようとしました、そしてそれが追加されたかどうか確かめるために非常に単純なルールさえ試みました、そしてまだ何もしません。

1
seth.fansided

これを試して。また、$ wp_rewrite-> flush_rules()を関数内に含めたくないため、ページが読み込まれるたびにフラッシュされます。

add_action('rewrite_rules_array', 'new_rewrite_rules');

function new_rewrite_rules($rules){
        $newrules = array();
        $newrules[ '^lists/([^/]*)/([^/]*)/?' = 'index.php?lists=$matches[1]&post=$matches[2]';
        return $newrules + $rules;
    }

あなたが一度だけルールをフラッシュしたいなら、これを試してください:

add_action('init', 'flush_new_rule');

function flush_new_rule(){
   global $wp_rewrite;
   if(is_array(get_option('rewrite_rules')) && !array_key_exists('^lists/([^/]*)/([^/]*)/?$', get_option('rewrite_rules')){
   $wp_rewrite->flush_rules( true );
   };
}
2
David Labbe

あなたは書き換え規則を作ることができる正規表現にいくつかのエラーがありました。どの「リスト」やどの種類の投稿を取得したいのかわからないので、デバッグすることはできませんが、この書き換え規則は正しいはずです。

add_action( 'init', 'add_rewrite_tags' );
function add_rewrite_tags() {

    add_rewrite_rule( 
        '^lists/([^/]+)/([^/]+)/?$', 
        'index.php?lists=$matches[1]&post=$matches[2]', 
        'top' 
    );

}

それからあなたは書き換えルールをフラッシュする必要があります。あなたはそれをすることができますwp-adminのパーマリンク設定ページを訪れてください。コード内の書き換えルールをフラッシュする場合は、プラグインのアクティブ化(テーマに書き換えルールを追加する場合はテーマのアクティブ化)を使用する必要があります。たとえば、プラグインのメインファイルでは、次のようになります。

register_activation_hook( __FILE__, function() {

    flush_rewrite_rules();

} );
register_deactivation_hook( __FILE__, function() {

    flush_rewrite_rules();

} );
1
cybmeta