web-dev-qa-db-ja.com

WP_Queryを作成して、そのカテゴリまたはそれの親子カテゴリで投稿を検索します。

こんにちは私はこれが前に頼まれたかどうか本当に申し訳ありませんが私が必要とする正確な解決策を見つけることができませんでした。だからここに私は私のWordpressのページで検索を作成したい問題です。ユーザーがフォームを送信するたびに、自分のカテゴリまたは自分の親/子カテゴリで投稿を検索するクエリを作成します。これが例です:

Example

MYSQLでは、このようになりますが、私はこれが初めてなので、WP_Queryを使用してWordpressでそれを実行する方法がわかりません。

SELECT * FROM posts 
WHERE posts.category 
LIKE '%John Doe%' OR posts.sub_category LIKE '%John Doe%'

テーブルがどのように接続されているかわからないので、ここでいくつかのJOIN操作を行う必要があるかもしれませんが、誰かが私が求めていることを理解していることを願っています。

任意の助けがいただければ幸いです。前もって感謝します!

1
Kanga

最初に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 ...

}
0
majick

これを使って:

$query = new WP_Query( array( 'cat' => 4 ) );

4は最上位カテゴリ(Blackburn)のIDです。この問い合わせはサブキャットを含みます。

リファレンス - WP_Query

1
Charles Jaimet