質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

316閲覧

wordpressでの検索候補の出方

Nobumaro

総合スコア6

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/11/07 07:57

###前提・実現したいこと
今wordpressでElasticpressを利用して検索候補を出すようにしています。
プラグイン内のphpとjsファイルをカスタマイズしていこうと思っていて、現状だとすべてのコンテンツが一緒になってスコア順で並び替えられて、Top10個のpost_titleが表示されるようになっています。その表示をpost_typeごとで分割していきたいと思っているのですが、なかなか思うような結果になりません。

post_typeを代入する場所かなと思っているn = epas.postTypeという箇所をn2 = epas.secondpostTypeというように2つ目を作成して呼び出せるようにと思いました。
php側でもpost_typeを入れ込んでいる箇所があって、その名前を「secondpostType」で作成してあります。
作成したのはいいものの、どこを書き換えればいいのかがわからず、今結果が出ていない状況です。
プラグインの中身だという事もあってわかりにくいかと思いますが、どういう風に2つのデータを取得すればいいでしょうか?

###該当のソースコード
! function(e) {
"use strict";

function t(e) { e.closest("form").submit() } function s(e, t) { e.val(t) } function o(e, t) { return window.location.href = t } function n(e, n) { if ("navigate" === epas.action) return o(e, n.dataset.url); s(e, n.innerText), t(e) } function a(e, t) { var s = null; return function() { var o = this, n = arguments; window.clearTimeout(s), s = window.setTimeout(function() { e.apply(o, n) }, t) } } function i(t, s, o) { "all" !== s && void 0 !== s && "" !== s || (s = "all"); var n = { sort: [{ _score: { order: "desc" } }], query: { multi_match: { query: t, fields: o, operator: "and" } } }; return "string" == typeof s && "all" !== s && (s = s.split(",")), e.isArray(s) && (n.post_filter = { bool: { must: [{ terms: { "post_type.raw": s } }] } }), n } function r(t) { return jQuery.support.cors = !0, e.ajax({ url: epas.endpointUrl, type: "post", dataType: "json", crossDomain: !0, data: JSON.stringify(t) }) } function u(t, s) { var o, a = s.closest(".ep-autosuggest-container").find(".ep-autosuggest"), i = a.find(".autosuggest-list"); for (i.empty(), e(".autosuggest-item").off(), t.length > 0 ? a.show() : a.hide(), o = 0; o < t.length; ++o) { var r = t[o].text, u = t[o].url; if (0 == o) { e('<h3>店舗名</h3><li><span class="autosuggest-item" data-search="' + r + '" data-url="' + u + '"><a href="' + u + '">' + r + "</a></span></li>").appendTo(i) }else if (0 < o < 5) { e('<li><span class="autosuggest-item" data-search="' + r + '" data-url="' + u + '"><a href="' + u + '">' + r + "</a></span></li>").appendTo(i) } } e(".autosuggest-item").on("click", function(e) { n(s, e.srcElement) }), s.off("keydown"), s.on("keydown", function(e) { if (38 !== e.keyCode && 40 !== e.keyCode && 13 !== e.keyCode); else { var t, o = s.closest(".ep-autosuggest-container").find(".autosuggest-list li"), a = o.filter(".selected"); switch (e.keyCode) { case 38: t = a.prev(); break; case 40: o.hasClass("selected") ? t = a.next() : (o.first().addClass("selected"), t = o.first()); break; case 13: return o.hasClass("selected") ? (n(s, a.children("span").get(0)), !1) : void 0 } if (t.is("li") ? (a.removeClass("selected"), t.addClass("selected")) : o.removeClass("selected"), 38 === e.keyCode) return !1 } }) } function l() { e(".autosuggest-list").empty(), e(".ep-autosuggest").hide() } if (epas.endpointUrl && "" !== epas.endpointUrl) { var c = e('.ep-autosuggest, input[type="search"], .search-field'), d = e('<div class="ep-autosuggest"><ul class="autosuggest-list"></ul></div>'); c.each(function(t, s) { var o = e('<div class="ep-autosuggest-container"></div>'), n = e(s); n.attr("autocomplete", "off"), o.insertAfter(n); var a = n.siblings("label"); n.closest("form").find(".ep-autosuggest-container").append(a).append(n), d.clone().insertAfter(n), n.trigger("elasticpress.input.moved") }), d.css({ top: c.outerHeight() - 1, "background-color": c.css("background-color") }), e(c).each(function(t, s) { e(s).on("keyup keydown keypress", function(e) { 38 !== e.keyCode && 40 !== e.keyCode || e.preventDefault(), 27 === e.keyCode && l() }) }), c.each(function(t, s) { var o = e(s); o.on("keyup compositionend", a(function(t) { if (38 !== t.keyCode && 40 !== t.keyCode && 13 !== t.keyCode && 27 !== t.keyCode) { var s = o.val(), n = epas.postType, a = epas.searchFields; s.length >= 2 ? r(i(s, n, a)).done(function(t) { if (t._shards.successful > 0) { var s = {}, n = []; e.each(t.hits.hits, function(e, t) { var o = t._source.post_title, a = t._source.permalink, i = t._source.post_id; s[i] || (s[i] = !0, n.push({ text: o, url: a })) }), 0 === n.length ? l() : u(n, o) } else l() }) : 0 === s.length && l() } }, 200)) }), window.epasAPI = { hideAutosuggestBox: l, updateAutosuggestBox: u, esSearch: r, buildSearchQuery: i } }

}(jQuery);

###試したこと
下記に書いてあるデータの2つ目を作成してn2のデータを代入したものを呼び出すように設定しました。
同じデータをループするという結果が起きたり、文字を変換してから「Enter」を押したときにn2のデータが表示されたりしていて、同時に表示されることがなかったです。

i = a.find(".autosuggest-list"); for (i.empty(), e(".autosuggest-item").off(), t.length > 0 ? a.show() : a.hide(), o = 0; o < t.length; ++o) { var r = t[o].text, u = t[o].url; if (0 == o) { e('<h3>店舗名</h3><li><span class="autosuggest-item" data-search="' + r + '" data-url="' + u + '"><a href="' + u + '">' + r + "</a></span></li>").appendTo(i) }else if (0 < o < 5) { e('<li><span class="autosuggest-item" data-search="' + r + '" data-url="' + u + '"><a href="' + u + '">' + r + "</a></span></li>").appendTo(i) } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問