web-dev-qa-db-ja.com

add_rewrite_rule()が機能しない

エントリをデータベースで検索するには、URLの最後の部分にプロパティ参照を渡す必要があります。

http://example.com/cottage-details/G638/

私のプラグイン用にG638を配列に渡す必要があります。以下は、cottage-detailsページを呼び出すことですが、サーバーから取得したい情報ではなく、URLの最後の部分を削除して空のページを表示します。私が使うなら

http://example.com/cottage-details/?propref=G638

それは完璧に機能します。

/**
 * Rewrite tags for plugin
 */
function dcc_rewrite_tags() {
    add_rewrite_tag('%propref%', '([^&]+)');
}

add_action('init', 'dcc_rewrite_tags', 10, 0);

/**
 * Rewrite rules for plugin 
 */
function dcc_rewrite_rules() {
    add_rewrite_rule('^[^/]*/([^/]*)/?','index.php?p=2&propref=$matches[1]','top');
}

add_action('init', 'dcc_rewrite_rules', 10, 0);

どうしたの?

2
Badger

あなたが書き換えるルールはかなり広く、そしてたぶん多くの衝突を引き起こすでしょう。

add_action('init', 'dcc_rewrite_tags');
function dcc_rewrite_tags() {
    add_rewrite_tag('%propref%', '([^&]+)');
}

add_action('init', 'dcc_rewrite_rules');
function dcc_rewrite_rules() {
    add_rewrite_rule('^cottage-details/(.+)/?$','index.php?page_id=2&propref=$matches[1]','top');
}

そうすると、propref query varにアクセスできます。

$propref = get_query_var( 'propref' );

そして書き換えルールをフラッシュすることを忘れないでください。設定 - >パーマリンクへ行き、保存ボタンをクリックしてください。

:コメントで述べたように、標準投稿ではなくページを使用しているため、p query varをpage_idに変更しました。

6
cybmeta