问题描述
我想在 (搜索) 表单上有一个 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。