仕様のようですよ。ドキュメントが追いついていないです。
どうやら、この変更は、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');
}
}
こうすると、ここで指定した順序だけが使われるようになります。条件は適宜設定してください。
現時点の仕様であること、
修正の方法、いずれも分かりました。
あとはソースとにらめっこして弄ってみます。
ありがとうございました。