問題描述
我正在嘗試建立一個 wordpress 搜尋功能,顯示搜尋欄下方的實際結果。 World Bank 網站上有一個例子 (下面的螢幕) 。我不會在 Google.com 上找到一個自動填充,它會在您輸入的字詞中找到,而是希望在網站上查詢實際的帖子。
我嘗試透過 Wordpress Answers 和其他類似的資源進行重新整理,但是隻能執行一個不是我正在尋找的 Google 型別的搜尋。任何幫助或正確方向的點將不勝感激。
最佳解決方案
以下使用 jQuery UI 自動填充,自 3.3 以來已經包含在 WordPress 中。 (我從 @Rarst:D 借用了格式) 。
這還不是你剛才所說的,但是給你一個很好的起點。以下使用基本的 jQuery UI 樣式,但您可以從 use the one that’s currently worked out on trac 並從您的 plug-in 資料夾中呼叫該樣式。
class AutoComplete {
static $action = 'my_autocomplete';//Name of the action - should be unique to your plugin.
static function load() {
add_action( 'init', array( __CLASS__, 'init'));
}
static function init() {
//Register style - you can create your own jQuery UI theme and store it in the plug-in folder
wp_register_style('my-jquery-ui','http://googleajax.admincdn.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css');
add_action( 'get_search_form', array( __CLASS__, 'get_search_form' ) );
add_action( 'wp_print_footer_scripts', array( __CLASS__, 'print_footer_scripts' ), 11 );
add_action( 'wp_ajax_'.self::$action, array( __CLASS__, 'autocomplete_suggestions' ) );
add_action( 'wp_ajax_nopriv_'.self::$action, array( __CLASS__, 'autocomplete_suggestions' ) );
}
static function get_search_form( $form ) {
wp_enqueue_script( 'jquery-ui-autocomplete' );
wp_enqueue_style('my-jquery-ui');
return $form;
}
static function print_footer_scripts() {
?>
<script type="text/javascript">
jQuery(document).ready(function ($){
var ajaxurl = '<?php echo admin_url( 'admin-ajax.php' ); ?>';
var ajaxaction = '<?php echo self::$action ?>';
$("#secondary #searchform #s").autocomplete({
delay: 0,
minLength: 0,
source: function(req, response){
$.getJSON(ajaxurl+'?callback=?&action='+ajaxaction, req, response);
},
select: function(event, ui) {
window.location.href=ui.item.link;
},
});
});
</script><?php
}
static function autocomplete_suggestions() {
$posts = get_posts( array(
's' => trim( esc_attr( strip_tags( $_REQUEST['term'] ) ) ),
) );
$suggestions=array();
global $post;
foreach ($posts as $post):
setup_postdata($post);
$suggestion = array();
$suggestion['label'] = esc_html($post->post_title);
$suggestion['link'] = get_permalink();
$suggestions[]= $suggestion;
endforeach;
$response = $_GET["callback"] . "(" . json_encode($suggestions) . ")";
echo $response;
exit;
}
}
AutoComplete::load();
次佳解決方案
好的,這將是非常基本的示例程式碼,使用本機 suggest.js,WP 核心為 Ajax 並繫結到預設搜尋表單 (從未修改的 get_search_form()呼叫) 。這不是你所要求的,而是增加搜尋是非常痛苦的,以獲得完美。 🙂
class Incremental_Suggest {
static function on_load() {
add_action( 'init', array( __CLASS__, 'init' ) );
}
static function init() {
add_action( 'wp_print_scripts', array( __CLASS__, 'wp_print_scripts' ) );
add_action( 'get_search_form', array( __CLASS__, 'get_search_form' ) );
add_action( 'wp_print_footer_scripts', array( __CLASS__, 'wp_print_footer_scripts' ), 11 );
add_action( 'wp_ajax_incremental_suggest', array( __CLASS__, 'wp_ajax_incremental_suggest' ) );
add_action( 'wp_ajax_nopriv_incremental_suggest', array( __CLASS__, 'wp_ajax_incremental_suggest' ) );
}
static function wp_print_scripts() {
?>
<style type="text/css">
.ac_results {
padding: 0;
margin: 0;
list-style: none;
position: absolute;
z-index: 10000;
display: none;
border-width: 1px;
border-style: solid;
}
.ac_results li {
padding: 2px 5px;
white-space: nowrap;
text-align: left;
}
.ac_over {
cursor: pointer;
}
.ac_match {
text-decoration: underline;
}
</style>
<?php
}
static function get_search_form( $form ) {
wp_enqueue_script( 'suggest' );
return $form;
}
static function wp_print_footer_scripts() {
?>
<script type="text/javascript">
jQuery(document).ready(function ($) {
$('#s').suggest('<?php echo admin_url( 'admin-ajax.php' ); ?>' + '?action=incremental_suggest');
});
</script><?php
}
static function wp_ajax_incremental_suggest() {
$posts = get_posts( array(
's' => $_REQUEST['q'],
) );
$titles = wp_list_pluck( $posts, 'post_title' );
$titles = array_map( 'esc_html', $titles );
echo implode( "n", $titles );
die;
}
}
Incremental_Suggest::on_load();
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。

