web-dev-qa-db-ja.com

外部書き換えを追加できません

Functions.phpに次のようなコードがあります。

function add_custom_rewrite_rules(){

   add_rewrite_tag('%gallery%','([^/]+)', 'gallery=');
   add_rewrite_tag('%album%','([^/]+)', 'album=');

   add_rewrite_rule('galleries/(.+)/?$' , 'index.php?pagename=galleries&album=1&gallery=$matches[1]');
}

add_action('init', 'flush_rewrite_rules');
add_action('init', 'add_custom_rewrite_rules');

しかし、書き換えルールは追加されていません、そしてそれは私の管理者の書き換えのリストに表示されません。

1
blurfman01

まず、これをしないでください。

add_action('init', 'flush_rewrite_rules');

WordPressがロードされるたびに、書き換えルールをフラッシュします。書き換えが確実に行われるようにするには、これを一度だけ実行する必要があります。

次に、add_rewrite_tagはtagとregexの2つの引数のみを取ります。クエリ変数を直接指定したい場合は、次のようにする必要があります。

<?php
global $wp_query;
$wp_query->add_rewrite_tag('%gallery%','([^/]+)', 'gallery=');
$wp_query->add_rewrite_tag('%album%','([^/]+)', 'album=');

あなたの場合、それは重要ではありません。タグと同じクエリ変数を使用しています。

最後に、あなたの正規表現にいくつかのエラーがありました。あなたはニンジンから始める必要があります、そして私は第二部のために(.*)を使用しないでしょう。また、WPに書き換えを配置する場所を指定するadd_rewrite_ruleの3番目の引数も指定する必要があります。あなたはtopがWordPressにこの規則が の前に - 組み込まれた規則の前にくるべきであることを伝えて欲しいのです。

これは動作します:

<?php
add_action( 'init', 'wpse41778_add_rewrite' );
function wpse41778_add_rewrite()
{
    add_rewrite_tag('%gallery%','([^/]+)');
    add_rewrite_tag('%album%','([^/]+)');
    add_rewrite_rule(
        '^galleries/([^/]+)/?$', 
        'index.php?pagename=galleries&album=1&gallery=$matches[1]',
        'top'
    );
}

書き換え規則をフラッシュしたとします。ルールをプラグインにドロップすると、それらをフラッシュするためにregister_activation_hookを使用できます。

<?php
register_activation_hook( __FILE__, 'wpse41778_flush_rewrite' );
function wpse41778_flush_rewrite()
{
    wpse41778_add_rewrite();
    flush_rewrite_rules();
}

galleryまたはalbumクエリ変数の値を取得するには、次のようにします。

$gallery = get_query_var( 'gallery' );
$album = get_query_var( 'album' );

あなたの書き換えに基づいて、あなたの使用法はおそらくこのようなものになるだろう:

<?php
if( get_query_var( 'album' ) )
{
    $gallery = get_query_var( 'gallery' );
    // do stuff with $gallery
}

これの一部を プラグイン に書き換えます。

3
chrisguitarguy