サポート » 使い方全般 » 検索結果が日付順に並ばない

  • 解決済 hina6083

    (@hina6083)


    2007年くらいからWordPressを使っているのですが、
    3.8や3.8.1にアップデートしてから検索結果が
    日付順に並ばなくなって困っています。
    phpファイルはデフォルトのままです。
    記事の並び替えのためのプラグインなども入れていません。

    同様の現象に遭遇された方、または暫定的な直し方など
    分かる方いらっしゃいますでしょうか。

    そもそもこの動きは現バージョンでは仕様なのでしょうか?

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • モデレーター Takuro Hishikawa

    (@hissy)

    3.7からの仕様変更でタイトルに検索語がマッチする投稿が優先されるようになりました。
    日付順に戻したい場合はこちらのフォーラムの投稿が参考になると思います。
    http://wordpress.org/support/topic/371-i-need-search-to-show-results-by-date-not-relevance?replies=3

    仕様のようですよ。ドキュメントが追いついていないです。

    どうやら、この変更は、3.7.0 かららしいのですが、3.7.0 で「検索にかかったタイトル順 + 日付順」となっていませんでしたか?

    一番詳しいドキュメントは、現状、wp-includes/query.php のコメントなので、それを参照していただくほかないのですが、現在はこれがデフォルトです。フィルタフック、posts_search_orderby や wp_search_stopwords が追加されています。これもドキュメントがありません。

    以下、日付順にしたい場合の対策です。

    posts_search_orderby フックを使えばとりあえず、日付順にすることができますが、ちょっと使いにくいです。ユーザが使うために用意されたフィルタじゃないかもしれません。

    add_filter('posts_search_orderby', 'your_order_func');
    function your_order_func($orderby) {
        global $wpdb;
        $orderby = "$wpdb->posts.post_date";
    }

    みたいに使うのですが、まず、生の SQL ステートメントを書くというのが気持ち悪いです。また、昇順、降順が書き換えられません。デフォルトの降順で処理されます。

    function your_order_func() {
        global $wpdb;
        return "$wpdb->posts.post_date ASC";
    }

    とすると、昇順にできますが、下のように、検索以外のデフォルト「日付降順」の指定が後についたクエリになるので、気持ち悪いです。というか、やめた方がいいです。

    ORDER BY wp_posts.post_date ASC, wp_posts.post_date DESC LIMIT 0, 10

    これ以外には、たとえば、pre_get_posts アクションフックを使って変えるという方法もあります。こちらはインターフェイスがちゃんとしているし、ドキュメントや web 情報が多いので、おすすめです。

    add_action('pre_get_posts', 'your_order_func');
    function your_order_func($query) {
        if (!$query->is_main_query() || is_admin()) return;
        if ($query->is_search()) {
            $query->set('orderby', 'date');
            $query->set('order', 'DESC');
        }
    }

    こうすると、ここで指定した順序だけが使われるようになります。条件は適宜設定してください。

    トピック投稿者 hina6083

    (@hina6083)

    現時点の仕様であること、
    修正の方法、いずれも分かりました。
    あとはソースとにらめっこして弄ってみます。

    ありがとうございました。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「検索結果が日付順に並ばない」には新たに返信することはできません。