サポート » その他 » カスタム投稿の投稿タイプ別の検索が上手くいかない

  • カスタム投稿の投稿タイプを、functions.phpにて2種類作っております
    essentialとseminar
    というものです。

    各ページにて投稿タイプ内をキーワード検索出来ればと思い、
    自分で調べてみて各アーカイブページにフォームを設置してみました。
    参考サイトは↓です
    https://ojimoney.com/webdevelop/no-plugin-search/

    ↓大事なお知らせ
    http://teternal.com/essential/
    ↓今後のセミナー一覧
    http://teternal.com/seminar
    ↓過去セミナー一覧
    http://teternal.com/seminar-old/`

    essentialの方は問題なく動いているようなのですが、
    seminarの方はなぜなのか……全く検索が機能しておりません。。

    ※実際の記述は↓です(archive-seminar.php内に)

    <form method=”get” id=”testSearch” action=”<?php echo home_url(‘/’); ?>”>
    <input type=”text” name=”s” id=”testSearchInput” value=”<?php the_search_query(); ?>” placeholder=”カスタム投稿タイプ別検索” />
    <input type=”hidden” name=”post_type” value=”seminar”>
    <input type=”submit” value=”search” accesskey=”f” />
    </form>

    セミナーイベントの種類上、過去のものを投稿日順にアーカイブしていくのではなく
    カスタムフィールドでセミナー日という項目を別で作成し、未来日を投稿させる形にしてます。
    これに関する参考サイトは↓です
    https://www.webopixel.net/wordpress/343.html

    どうしてこれで機能しないのでしょうか?

    検索については、未来と過去で分けれたら一番良いですが、
    最悪過去のものも未来のものも一緒に出てもいいとは考えております。
    どうか助けてください>< m(__)m

    • このトピックはjmani007が1年、 3ヶ月前に変更しました。

    ヘルプの必要なページ: [リンクを見るにはログイン]

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック投稿者 jmani007

    (@jmani007)

    上記の件について、解決までいけてないのですが、
    わかったことがあります。
    大きな原因としては、
    archive-seminar.php内で、

    <?php $query = new WP_Query(array(
        'post_type' => 'seminar',     /* イベント投稿タイプ */
        'posts_per_page' => 8,/* 1ページに表示する記事数 */
        'post_status' => 'publish',  /* 公開している */
        'meta_value' => date('Y/m/d H:i'), /* 現在の日付を基準 */
        'meta_key' => 'seminar_start', /* 比較するmeta_key */
        'meta_compare' =>'>=',        /* meta_keyがvalueより大いものだけ */
        'orderby' => 'meta_value',   /* ソートはmeta_valueを基準に */
        'order' => 'ASC',    /* 昇順に並び替え  */
    	'paged' => get_query_var('paged')/* ページネーションできるように */
    ));
    ?>

    ↑と、現在の日付よりも未来日のみを表示させるために、新しい$queryを定義して、

    <?php if ( have_posts() ) : ?>
     <?php while (have_posts() ) : the_post();?>

    だったものを、

    <?php if ( $query->have_posts() ) : ?>
     <?php while ( $query->have_posts() ) : $query->the_post();?>

    に書き換えて、記事として吐き出す内容を変更したことによって、
    検索が機能しなくなるようでした。
    恐らくですが、この定義よりも上にある検索バーはこの$queryの内容が読めておりません。

    archive-○○.phpで定義した新しい$queryからキーワード検索できるような方法がありましたら、教えていただけると助かりますm(__)m
    (でも、そうなると過去セミナーは除外されますかね??汗)
    調べてもなかなかでてきませんでした。。`

    • この返信は1年、 3ヶ月前にjmani007が編集しました。

    jmani007さん、こんにちは。

    WP_Queryの定義の中に検索文字列がある場合に検索パラメータを読み込むようにしてみるなどはいかがでしょうか(未検証)。
    参考) Search Parameters

    ご参考になれば。

    トピック投稿者 jmani007

    (@jmani007)

    shokun0803さん、ありがとうございます!
    試してみたんですが、

    <?php $query = new WP_Query(array(
        'post_type' => 'seminar',     /* イベント投稿タイプ */
        'posts_per_page' => 8,/* 1ページに表示する記事数 */
        'post_status' => 'publish',  /* 公開している */
        'meta_value' => date('Y/m/d H:i'), /* 現在の日付を基準 */
        'meta_key' => 'seminar_start', /* 比較するmeta_key */
        'meta_compare' =>'>=',        /* meta_keyがvalueより大いものだけ */
        'orderby' => 'meta_value',   /* ソートはmeta_valueを基準に */
        'order' => 'ASC',    /* 昇順に並び替え  */
        's' => 'keyword',
        'paged' => get_query_var('paged')/* ページネーションできるように */
    ));
    ?>

    これだと、記事の読込み自体がされなくなるようでした。
    教えて頂いたのに、申し訳ありません。
    もうちょっとやり方がないか自分でも考えてみます。

    jmani007さん、こんにちは。

    これは…このまま記述されてますか?
    's' => 'keyword',
    検索した時の URL を見てみれば分かると思いますが、パラメーターにs=の後に検索文字列が入っていると思います。もしご提示のコードのまま記載したのだとすれば、毎回「 keyword 」という文字列で検索された結果がWP_Queryに入ってくることになるので、記事内に「 keyword 」の文言が使われていなければヒット数 0 で当然ですね…

    この'keyword',の部分に検索文字列があったらその検索文字列を入れるという処理を行わなければ正しい結果にはならないかと思われます。試しにこの'keyword',の部分に実際に記事内で使われている文言を記載してしてみたら結果が変わるのか試してみてはいかがでしょうか。

    WordPress の場合、パラメーターに付加されてきた文字列を取得する関数もありますので、取得した文字列を適切にエスケープして's' => $keyword,のように指定されるとよろしいかと思います(未検証:注)エスケープは必須です)。

    ご参考になれば。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「カスタム投稿の投稿タイプ別の検索が上手くいかない」には新たに返信することはできません。