WP_QueryのURLからのカスタムデータの適切なフローは何ですか?


14

複雑なファセットをWPクエリに統合する複数の段階のプロセスがあります。問題がある-深い私はより多くのファジー私はそれが方法になっもらうはずの仕事に、私はむしろ、本発明のもの(と自分自身に穴を掘り)よりも、ガイドラインを使用することができます。

私が持っている一般的な段階(擬似コード、しかし実際に近い):

  1. URLから値を取得する(のような単純なものperson=1
  2. 値を処理し、カスタムクエリ命令を追加します($relationship_query[] = array('relationship' => 'person_to_cat', 'object' => 1 );
  3. 最終的なカスタムクエリ命令を取得し、適切なSQLディレクティブを生成する

今ではそのようなこと(関係、分類、日付)がたくさんあり、脆弱になっています(コードの1つのコーナーは、他のコードのコーナーがそれを見つけてすべてがバラバラになるとは思っていません)。

大きな質問です-URL経由でWPにカスタムデータを渡し、受信し、保存し、処理するための適切なプロトコルは何ですか?

小さい部品:

  • WP内部と衝突しないようにする方法
  • 中間データをどこにどのように保存しますか?
    • queryquery_varsプロパティの違いは?それらはコードでほとんど同じように使用されるようですが、異なる値を保持する傾向があり、メソッドはそれを優先しquery_varsます。

回答:


6

あなたが探しているWP関数はadd_rewrite_tagだと思います。カスタムGETパラメータをURLに追加し、に自動的に含めることを目的としていますquery_vars

たとえば、以下をinitフックに追加できます。

add_rewrite_tag('%person%','([^&]+)');

http://example.com?person=joeのようなURLの場合、グローバル$wp_queryには

$wp_query->query_vars['person'] = 'joe'

また、http: //example.com/person/joeなど、URLをきれいにする書き換えルール追加することもできます

add_rewrite_rule('^person/([^/]*)/?','index.php?person=$matches[1]','top');

詳細と例については、Rewrite APIをご覧ください。


2
私はに関連するすべてのコードを読むために(最後に)いくつかの時間を見つけたWPWP_Query私は思うし、そこに起こって多くのことがありますしながら、add_rewrite_tag()カスタムクエリVARのWPを認識させると、それとよく遊ぶための最も簡潔な方法と思われます。
ラースト

1
  1. 予約されたquery_varsを確認するには、wp-includes / class-wp.phpをチェックしてください。
  2. 中間データの意味がわかりません。もっと説明してもらえますか?
  3. WPは、クエリとして変換されるURLのquery_stringに基づいてページをロードし、WP_Queryによって処理されて、どのquery_varが使用されているかを判断します。

例:/?pagename = aboutを指定してページをロードすると、WPはクエリ文字列を処理し、使用されているquery_varがpage_idであることを検出します。

別の例:/?cat = 1、/?category_name = uncategorizedおよび/ category / uncategorizedは同じquery_var 'cat'を持ちます


0

私はそれが$_GETand / or を介して行われると仮定し$_POST、それに応じて操作します。

または、大量のデータをdbに保存し、そのようにURLのIDを解析します

$data_id = $_GET['id'];

$data = $wpbd->get_results("SELECT * FROM wp_epic_table WHERE id=".$id);

クエリは明らかにそれほど単純ではなく、多くの結合と結合テーブルが関係する場合があります。私のページの1つでそれを行い、一意のIDを解析してから、MySQL経由でデータを構築します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.