通过AJAX自动完成标题-重新编写过去发布的帖子,而不是Like_scape()

时间:2015-11-09 作者:Work-Together2013

我正在尝试创建一个输入字段,该字段只能自动完成CPT中的标题。它们不需要链接,只需按字母顺序提取cpt的标题并从第一个字母开始搜索。

我在stackexchange上找到了一篇很棒的帖子,但它很旧,并且使用了like\\u escape(),这是不推荐使用的。我知道您现在应该使用esc\\u like()。我希望有人能为我指明正确的方向,如何从下面的代码中从like\\u escape()过渡到esc\\u like()?

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();
}
原始职务和贷记人如下:

Auto-complete or auto-suggest from list of post titles

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

代替$search = like_escape($_REQUEST[\'q\']); 具有

$search = $wpdb->esc_like( $_REQUEST[\'q\'] );
(注:假设$_REQUEST 具有标准WP magic\\u quotes\\u gpc转义。)

作为参考,下面是我在“functions.php”中输入的确切代码:

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

add_action(\'wp_footer\', \'se_wp_head\');
function se_wp_head() {
?>
Search: <input id="se_search_element_id" type="text">
<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\', {minchars:1});
});
</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 = $wpdb->esc_like($_REQUEST[\'q\']);

    $query = \'SELECT ID,post_title FROM \' . $wpdb->posts . \'
        WHERE post_title LIKE \\\'\' . $search . \'%\\\'
        AND post_type = \\\'post\\\'
        AND post_status = \\\'publish\\\'
        ORDER BY post_title ASC\';
    $rows = $wpdb->get_results($query);
    foreach ($rows as $row) {
        $post_title = $row->post_title;
        $id = $row->ID;
        echo $post_title, "\\n";
    }
    wp_die();
}
注意,建议框只是一个列表,因此需要一些样式。。。

相关推荐

JqueryUi对话框给出未捕获的TypeError:This._addClass不是函数错误

我有一个网站,我们需要一些自定义php编码来连接到外部数据库,以获取几个销售我们产品的供应商的产品评论URL。我们试图实现的基本想法是让用户注册他们的产品,然后如果他们愿意留下评论,就延长保修期。我正在使用XYZScript。com的“插入PHP”插件来实现这一点。该主题最初只加载了jQuery,以避免创建子主题,我们正在php脚本中加载jQueryUI。因此,我们将jQuery加载到文档的标题中,将jQueryUI加载到文档的正文中。我不太确定这是因为加载脚本的顺序造成的,还是其他一些冲突的javasc