2017-03-29 23 views
0

ゴール

の目に見えるURL

WordPress:なぜadd_rewrite_ruleは動作しませんか?

/products/building-automation/details/productSKU 

はの本当のWordPressのページを指している必要があります:私が言うことができるものから

/products/details/?SKU=productSKU 

コード

public function setup_frontend() { 

    add_rewrite_rule(
     'products/(building-automation|lighting-controls)/details/([^/]*)', 
     'products/details/?SKU=$matches[2]', 
     'top' 
    ); 

    // Other code logic... 

} 

$matchesは正規表現の部分を指していますこの例では、$matches[1]building-automation$matches[2]productSKUとなります。

私は何度も規則を流してみました。これはクラス内から呼び出されていますが、それは問題ではないようです。私はinitイベントに関数をアタッチしています。

を何が起こっているか

私は404テンプレートを取得しています。私は間違って何をしていますか?

編集

結局のところ、パラメータの第二の部分は、index.phpなければなりません。私がproducts/...を指し示そうとしていたので、それは壊れました。だから私はこれに更新しました:

add_rewrite_rule(
     'products/(building-automation|lighting-controls)/details/([^/]*)', 
     '?pagename=products/details&SKU=$matches[2]', 
     'top' 
    ); 

これはうまくいかず、正しいページとテンプレートを指しています。しかし、$matchesの部分はまだ通っていません。実際には、$_GET['SKU']'$matches[2]'として届いています。

答えて

1

をアクションの追加)>設定 - > Permalinks->ボタン "変更を保存"

2をDashboard-する

ゴーindex.phpで始まらないものに残念ながら、index.php?stuffを指している必要があります。しかし、以下に示すように、ページ名を使用することはできます。

add_rewrite_rule(
    'products/(building-automation|lighting-controls)/details/([^/]*)', 
    'index.php?pagename=products/details&SKU=$matches[2]', 
    'top' 
); 

第2に、クエリ文字列(SKU)を登録する必要があります。これを追加:

add_filter('query_vars', 'product_details_rewrite_filter'); 

function product_details_rewrite_filter($query_vars){ 
    $query_vars[] = 'SKU'; 
    return $query_vars; 
} 

あなたはまだ問題があります。 $_GET['SKU']$matches[2]であり、RIBU1Cではありません。これを修正するには、$matches[2]$2に変更してください。次に、それは動作します:

add_rewrite_rule(
    'products/(building-automation|lighting-controls)/details/([^/]*)', 
    'index.php?pagename=products/details&SKU=$2', 
    'top' 
); 
+0

答えの一部を試してみると、それは部分的に機能しています。 2番目のパラメータHASのように 'index.php'と思われます。しかし、あなたの答えの 'term'部分は正しいとは思えません。私は部分的に動作する新しい文字列で私の質問を編集しました。 –

+1

はい、申し訳ありませんが、サンプルコードのテキストの間違った部分を置き換えました。 また、$ _GET ['SKU']を使用できるようにこのコードを用意する必要があります。 add_filter( 'query_vars'、 'product_details_rewrite_filter'); function product_details_rewrite_filter($ query_vars){ $ query_vars [] = 'SKU'; return $ query_vars; } ' –

0

1)パーマリンクの更新を試みます。第一の問題は、それが指しているということです、あなたの関数に

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

add_rewrite_rule(
    'products/(building-automation|lighting-controls)/details/([^/]*)', 
    'products/details/?SKU=$matches[2]', 
    'top' 
); 

// Other code logic... 

}

+0

何度もやったことがあります。何も変わらない。 –

+0

あなたの関数にadd_actionを使用していますか? – Frunky

1

この方法では動作しません...あなたはこのコードでは不可能にしようとしています。 Rewrites WordPressのルールは、index.phpルーティングでは動作しますが、外部のパスワードでは動作しません。だから、

products/(building-automation|lighting-controls)/details/([^/]*)

は、 "ワードプレス" の言語(のようなもの)に "翻訳可能"

index.php?post_type=products&category=$matches[1]&scu=$matches[1]

予告する必要があり、scuも余分にVARとして定義する必要があります。

編集1: シング(と思う)あなたは本当にあなたが好きなようにそれを変更するために、あなたが(.htaccessファイルに行くことのフィルターコンテンツ)mod_rewrite_rulesフィルタを使用することができ、この場合には、htaccessのルールパターンのように見えるですachiveしようとしていますそれ。

edit 2: Advertisment - debug bar rewrite rulesというデバッグバープラグインを使用して、基本的にこのデータをデバッグすることもできます。 Notice:(現在、add_rewrite_ruleを使用してルールリストをサポートしていないため、ルールを視覚的に検査して期待通りのものかどうかのみ確認できます)。

+0

ええ、私はゆっくりと' index.php'を指さなければならないことに気づいた。それが事実でないなら、それはいいだろう。バックエンドに実際の "WordPress Page"を必要とせずに、ページテンプレートへのURLを指定できるのであれば、実際には完璧です。まぁ。私はベネディックの答えを正しいものとしてマーキングしています。なぜなら、あなたがする前に答えがあり、同様のことを言っていたからです。しかし、私はupvotedしました。ありがとう。 –

関連する問題