web-dev-qa-db-ja.com

書き換えルールが一致しない

自分のサイトに書き換え規則をいくつか追加する必要があります。この分かりやすいURLをリンクする必要があります。

www.example.com/site-tool-calendar

www.example.com/site-tool?tool=calendar

/site-toolはすでにWordPress内部のパーマリンクであり、機能しています

私のfunctions.phpに以下を追加しました

function custom_rewrite( $wp_rewrite ) {
    $feed_rules = array(
        '^site-tools-(^/.]+)/$'  =>  'site-tools/?tool=' . $wp_rewrite->preg_index(1),
    );
    $wp_rewrite->rules = $feed_rules + $wp_rewrite->rules;
}

add_filter( 'generate_rewrite_rules', 'custom_rewrite' );

それ以前のfunctions.phpでは、クエリvarsにparam "tool"を追加しました。

function wpd_query_vars( $query_vars ){
    $query_vars[] = 'tool';
    return $query_vars;
}
add_filter('query_vars', 'wpd_query_vars');

AdminパーマリンクページからルールをフラッシュしてURLをテストしようとしましたが、私のルールは$wp_rewrite->wp_rewrite_rules()リスト内に追加されていますがマッチング。

これは常に次のような一般的な規則と一致します。

([^/]+)(?:/([0-9]+))?/?$

私はそれをデバッグし、私のルールが最初にルールリストに現れるが、決して実行されないことを確認しました。

誰かが私が何かを間違えたかどうかを二重チェックするのを手伝ってくれる?私はたくさんの代替案を試してみましたが、それらのすべてが同じ状況に私を連れて行きました:規則は現れますが、決して実行されません。

2
Guille B

これを試してください。

最初にこの関数で必要な書き換え規則を追加してください

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

  add_rewrite_rule(
    '^site-tools-([^/]+)$',
    'index.php?pagename=site-tools&tool=$matches[1]',
    'top');

}

そのページ名をsite-toolsとします。

次にツールをquery varとして追加します。

add_filter('query_vars', 'wpd_query_vars');
function wpd_query_vars( $query_vars ){
    $query_vars[] = 'tool';
    return $query_vars;
}

パーマリンクを保存.

今あなたがhxxp://yourdomain.com/site-tools-calculator/にアクセスするならば、それはうまくいくはずです(計算機は他に何でもありえます)

あなたがそれをデバッグしたいならば、あなたはこの関数によって質問var "tool"をダンプすることができます:

add_action('template_redirect', 'test_my_queryvar', 999 );
function test_my_queryvar() {
    die( var_dump( get_query_var( 'tool' ) ) );
}
2
Ahmed Fouad