問題描述

我想在 (搜索) 表單上有一個 auto-complete 或 auto-suggest 功能:

當用户開始鍵入時,它建議具有匹配文本的帖子標題。

我也希望顯示我已經存儲的每個定製帖子的一些 meta-data(一個數字) 。例:

如果我鍵入”A”,它建議 「蘋果 (13),Aardvarks(51),宇航員 (21)」 等

最佳解決方案

是的,這是可能的。

您可以使用 WordPress http://codex.wordpress.org/Function_Reference/wp_enqueue_script 中包含的 jQuery Auto Suggest

這樣,您可以編寫一個對 Ajax URL 處理程序執行 Ajax 查找的表單。哪個你可以 add_action 。 http://codex.wordpress.org/AJAX_in_Plugins

所以你可以進行 ajax 查找,然後在操作方面你可以執行一個 get_posts 來匹配標題,或者一個原始的 sql Query 。並返回所需要的。

這應該有幫助,如果我很快得到時間,我可能會寫一個完整的代碼解決方案。但是它的大部分內容是一個完整的插件來幫助查找功能。

編輯:在這裏我們去,這樣的事情應該做,沒有測試它只是寫在我的頭頂。更新:刪除輸入的文本,狹義的自定義帖子類型和僅發佈的帖子

2012-11-21 編輯:在代碼示例中更新打字錯誤。

add_action('wp_enqueue_scripts', 'se_wp_enqueue_scripts');
function se_wp_enqueue_scripts() {
    wp_enqueue_script('suggest');
}

add_action('wp_head', 'se_wp_head');
function se_wp_head() {
?>
<script type="text/javascript">
    var se_ajax_url = '<?php echo admin_url('admin-ajax.php'); ?>';

    jQuery(document).ready(function() {
        jQuery('#se_search_element_id').suggest(se_ajax_url + '?action=se_lookup');
    });
</script>
<?php
}

add_action('wp_ajax_se_lookup', 'se_lookup');
add_action('wp_ajax_nopriv_se_lookup', 'se_lookup');

function se_lookup() {
    global $wpdb;

    $search = like_escape($_REQUEST['q']);

    $query = 'SELECT ID,post_title FROM ' . $wpdb->posts . '
        WHERE post_title LIKE '' . $search . '%'
        AND post_type = 'post_type_name'
        AND post_status = 'publish'
        ORDER BY post_title ASC';
    foreach ($wpdb->get_results($query) as $row) {
        $post_title = $row->post_title;
        $id = $row->ID;

        $meta = get_post_meta($id, 'YOUR_METANAME', TRUE);

        echo $post_title . ' (' . $meta . ')' . "n";
    }
    die();
}

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。