web-dev-qa-db-ja.com

検索機能をカスタマイズしますか?

私はこのWebサイトを再構築しています - http://www.mediwales.com/news _ WPプラットフォーム上。灰色のボックス内の検索領域に苦労しています。

地域と日付を削除していますので、それらについて心配する必要はありませんが、キーワードANDセクターで検索を設定するにはどうすればよいですか。

セクターを表す「ニュース」と呼ばれるカスタム分類法を作成しました。私の知る限りでは、通常の検索ではサイト全体でキーワードを検索するだけです。キーワードを検索するように検索を設定することはできますが、セクターが選択されている場合はそのセクター内のキーワードのみを検索することができますか?そして結果を表示します。

更新:

                        <?php $args = array(
    'show_option_all'    => '',
    'orderby'            => 'name',
    'order'              => 'ASC',
    'show_last_update'   => 0,
    'style'              => '',
    'show_count'         => 0,
    'hide_empty'         => 1,
    'use_desc_for_title' => 1,
    'child_of'           => 0,
    'feed'               => '',
    'feed_type'          => '',
    'feed_image'         => '',
    'exclude'            => '',
    'exclude_tree'       => '',
    'include'            => '',
    'hierarchical'       => true,
    'title_li'           => '',
    'show_option_none'   => __('No categories'),
    'number'             => NULL,
    'echo'               => 1,
    'depth'              => 0,
    'current_category'   => 0,
    'pad_counts'         => 0,
    'taxonomy'           => 'news',
    'walker'             => 'Walker_Category' ); 
    ?>

    <?php echo wp_list_categories($args); ?>


<?php
function Search_with_in_a_tax( &$query ) {
    if ( is_search() && isset($_GET['sector_array'])) {
        $tax_query = array(
             array(
                'taxonomy' => 'news',
                'terms' => $_GET['sector_array'],
                'field' => 'term_id',
              )
         );
         //turn it into a WP_Tax_Query object
        $tax_query = new WP_Tax_Query($tax_query);
        $query->set("tax_query", $tax_query);
    }
}
add_action('pre_get_posts', 'Search_with_in_a_tax', 1);
?>  

<form method="get" id="searchform" action="<?php bloginfo('home'); ?>/">
<div><input type="text" size="18" value="" name="s" id="s" />
<input type="submit" id="searchsubmit" value="Search" class="btn" />
</div>
</form>

これが私のこれまでのところです。それはキーワードを検索してニュースを選ぶことのようです。セクターを選択可能にすることはできません(上部のリンクのように)。どうすれば2つをリンクできますか?検索は、そのセクター内でキーワードを検索します(分類法)。

1
Rob

pre_get_posts hootを使用して、検索クエリを選択したセクターのみに絞り込むことができます。

function Search_with_in_a_tax( &$query ) {
    if ( is_search() && isset($_GET['sector_array'])) {
        $tax_query = array(
             array(
                'taxonomy' => 'news',
                'terms' => $_GET['sector_array'],
                'field' => 'term_id',
              )
         );
         //turn it into a WP_Tax_Query object
        $tax_query = new WP_Tax_Query($tax_query);
        $query->set("tax_query", $tax_query);
    }
}
add_action('pre_get_posts', 'Search_with_in_a_tax', 1);

更新:あなたのテーマのfunctions.phpファイルに上からのコードを入れてください。それから、あなたの中のフォームフィールドとしてカテゴリ(セクター)を出力する必要があります。検索フォームですので、これを試してみてください。

<form method="get" id="searchform" action="<?php bloginfo('home'); ?>/">
    <div>
        <label for="s">Keyword</label>
        <input type="text" size="18" value="" name="s" id="s" />
    </div>
    <div>
        <label for="sector_array">Sectors</label>
        <?php
        $categories=get_categories(array('orderby' => 'name','order' => 'ASC'));
        foreach ($categories as $category) {
            echo '<input type="checkbox" name="sector_array[]" value="'.$category->cat_ID.'">'.$category->cat_name;
        }
        ?>
    </div>
    <div>
        <input type="submit" id="searchsubmit" value="Search" class="btn" />
    </div>
</form>
1
Bainternet