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


13

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

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

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

如果输入“ A”,则提示“苹果(13),土豚(51),宇航员(21)”等。


meta字段的名称是什么?请添加代码,以准确显示添加字段的方式。谢谢。
kaiser 2012年

我已经假设meta字段是专门添加的post meta字段(通过meta box添加)或自定义post var,可以使用get_post_meta(iirc)进行访问
Barry Carlyon

我实际上还没有添加meta字段。
marctain 2012年

Answers:


17

是的,这是可能的。

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

这样,您可以编写一个对Ajax URL处理程序进行Ajax查找的表单。您可以在其中添加_action。http://codex.wordpress.org/AJAX_in_Plugins

因此,您可以进行ajax查找,然后在操作端仅执行get_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();
}

哇,谢谢巴里!我会旋转一下,这进入了functions.php,是吗?我将修改必要的部分,并查看其内容
marctain 2012年

2
从理论上讲,可以进入functions.php。我会将其粘贴在插件中,以免干扰。如果直接进入functions.php,则可以进行一些优化,因此可以将其中一些代码应用于functions.php中已经存在的函数(当然,取决于主题)
Barry Carlyon 2012年

它有效..几乎!我应该指定我希望它来自自定义帖子类型,我将编辑我的问题
marctain 2012年

已更新为包括like_escape。我起初没有使用%,因为他想搜索帖子标题从输入的第一个字母开始的位置。不是全球比赛。我的工作代码是$ _REQUEST ['q'],没有适用于jQuery建议的选项。Q模拟搜索引擎使用什么。
巴里·卡里昂

@BarryCarlyon请不要编辑所有小事。如果您进行10次编辑,它将自动转换为“社区Wiki”,并且您将失去所有代表点。而且我们需要更多的用户,这些用户可以添加良好的答案并获得最低收益。声誉,可以完成编辑,添加Wiki等任务。哦,而且exit;总是比die();:) 快
kaiser 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.