こんにちは私はこれが前に頼まれたかどうか本当に申し訳ありませんが私が必要とする正確な解決策を見つけることができませんでした。だからここに私は私のWordpressのページで検索を作成したい問題です。ユーザーがフォームを送信するたびに、自分のカテゴリまたは自分の親/子カテゴリで投稿を検索するクエリを作成します。これが例です:
MYSQLでは、このようになりますが、私はこれが初めてなので、WP_Queryを使用してWordpressでそれを実行する方法がわかりません。
SELECT * FROM posts
WHERE posts.category
LIKE '%John Doe%' OR posts.sub_category LIKE '%John Doe%'
テーブルがどのように接続されているかわからないので、ここでいくつかのJOIN操作を行う必要があるかもしれませんが、誰かが私が求めていることを理解していることを願っています。
任意の助けがいただければ幸いです。前もって感謝します!
最初にget_categories
を使用してフォームで使用するすべての投稿カテゴリを取得してから、それらをループ処理してマルチチェック入力を表示します。
function hierarchical_category_inputs ($cat, $indent) {
$cats = get_categories('hide_empty=false&orderby=name&order=ASC&parent='.$cat);
$indent++;
if ($cats) {
foreach ($cats as $cat) {
echo "<input type='checkbox' name='cat-".$cat->term_id."'";
echo " style='margin-left: ".($indent*10)."px;'> ".$cat->name."<br>";
hierarchical_category_inputs($cat->term_id, $indent);
}
}
}
echo "<form method='post'>";
// 0 for all categories, -1 so first indent is 0
hierarchical_category_inputs(0,-1);
echo "<input type='hidden' name='custom_catsearch' value='yes'>";
echo "<input type='submit' value='Search'>";
echo "</form>";
次に検索部分で、WP_Query
に渡すためにチェックされたカテゴリの配列を組み立てます。
function custom_catsearch_output() {
$cats = array();
foreach ($_POST as $key => $value) {
// make sure the post key starts with cat-
if (substr($key,0,4) == 'cat-') {
// check for check of the checkbox
if ($value == '1') {
// get the cat id from after cat-
$cats[] = substr($key,4,strlen($key));
}
}
}
$query = new WP_Query(array('cat' => $cats));
print_r($query);
// ... do something different with the results ...
}
これを使って:
$query = new WP_Query( array( 'cat' => 4 ) );
4は最上位カテゴリ(Blackburn)のIDです。この問い合わせはサブキャットを含みます。
リファレンス - WP_Query