web-dev-qa-db-ja.com

送信されたフォームからsSecificポストリクエストのための書き換えルールを生成すること

私は自分の投稿を特定の基準でフィルタリングすることを可能にするフォーム(method post)を持っています。 "最新"、 "今週"、 "先週"、...

それはうまくいきますが、もちろんURLはそれぞれのリクエストで同じです。私は、sendメソッドをGETに変更し、そのトリックでURLを変更したくはありません。私はそれがのような "動的な" URLを持つことを可能にするだろう既存のものに書き換えルールを追加できる解決策を探しています

http://myurl.com/most-recent
http://myurl.com/last-week
http://myurl.com/category-1/most-recent
http://myurl.com/category-1/last-week

URLの最後に「最近」、「先週」などの語句を検索する書き換え規則は、それらを削除してから通常の書き換え規則に戻ります。それで、それらの事前定義された投稿要求はカテゴリ、ページ、投稿のために働くでしょう...

皆さんが私の言っていることを理解できることを願っています!

1
chris

それほど難しいことではないと思います。カスタムの「動的」URLの数がわかっていると仮定すると、これでうまくいくはずです。

foreach ( array( 'most-recent','last-week','category-1/most-recent','category-1/last-week') as $page )
  add_rewrite_rule( "$page/?$", 'index.php', 'top' );

これはWordPressに、「XにマッチするURL構造があるときはいつでも、URLがsite.com/index.phpであるかのように扱い、他のものよりも先にこの規則に照らしてチェックする」ということです。 WordPressはそれをホームページのように扱いますが、フォームから$_POST情報も送信して正しい情報を取得します。

その最初の引数は正規表現なので、事前にpreg_quote()を通して各項目を実行するのは悪い考えではありません。

お役に立てば幸いです。

編集

この操作にワイルドカードの正規表現を使用しないことを強くお勧めします。それ以外の場合、ページはこの規則に照らして一致し始めます。

私たちの目的のために、これらの構造体は/で区切られた位置を持つものと考えてください。たとえば、category-1/most-recentでは、位置1はcategory-1になり、位置2はmost-recentになります。そのため、すべての構造体について、その位置に入る可能性のあるすべての文字列を使用して各位置の配列を作成します。だからあなたはこのようなものがあるかもしれません:

$timing = array(
  'most-recent',
  'last-week',
);
$cats = array(
  'category-1',
  'category-2',
  'category-3'
);
$timing = array_map( 'preg_quote', $timing );
$timing = implode( '|', $timing );
$cats = array_map( 'preg_quote', $cats );
$cats = implode( '|', $cats );
add_rewrite_rule( "($timing)/?$", 'index.php', 'top' );
add_rewrite_rule( "($cats)/($timing)/?$", 'index.php', 'top' );
1
John P Bloch

私はあなたが書いたものを正確に試すのに何時間も費やしましたが、グーグルや研究を始めましたが…それは単にうまくいきません。私は、管理者に書き換え規則を示す小さな機能を書きました。私はスクリーンショットを作り、それを添付しました。あなたや誰かが解決策やアイデアを持っていれば素晴らしいでしょう....

これはうまくいくはずのリンクです。私はそれを少し単純化するためにカテゴリーを除外します。

http://localhost/myurl.com/summarizes/interviews/from-this-week

スクリーンショットを添付することはできません。これが追加される規則です

(今週から|今月|今月から|ビッグバン前)/?$ index.php(要約/インタビュー)/(今週|今月から|ビッグバン前) /?$ index.php

0
chris