从帖子标题列表中自动完成或自动建议

时间:2012-07-15 作者:marctain

我想在(搜索)表单上具有自动完成或自动建议功能:

当用户开始键入时,它会建议具有匹配文本的帖子标题。

我还希望它显示一些元数据(一个数字),我存储了与每个自定义帖子相关的元数据。示例:

如果我输入“A”,它会显示“苹果(13)、土豚(51)、宇航员(21)”等。

1 个回复
最合适的回答,由SO网友:Barry Carlyon 整理而成

是的,这是可能的。

您可以使用WordPress附带的jQuery自动建议http://codex.wordpress.org/Function_Reference/wp_enqueue_script

有了它,您可以编写一个表单,对Ajax URL处理程序执行Ajax查找。您可以在其上添加\\u操作。http://codex.wordpress.org/AJAX_in_Plugins

因此,您可以使用ajax进行查找,然后在操作端只需执行get\\u posts来匹配标题,或者执行原始sql查询。并返回所需的内容。

这应该会有所帮助,如果我很快有时间,我可能会编写一个完整的代码解决方案。但它的大部分是一个完整的插件来帮助查找。

编辑:我们开始吧,像这样的东西应该可以做到,还没有测试过,只是把它记下来了。更新:转义输入的文本,按自定义帖子类型缩小范围,仅限于已发布的帖子

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();
}

结束

相关推荐

Tags as autocomplete values

如何将常规post标记作为自动完成字段的值加载?我现在得到的是这样的预设值:var data = {items: [ {value: \"1\", name: \"Siemens\"}, {value: \"2\", name: \"Phillips\"}, {value: \"3\", name: \"Whirlpool\"}, {value: \"4\", name: \"LG\"} }; $(\"#input_1_3\").autoSuggest(da