插件内自动完成或根据帖子标题提出建议

时间:2015-11-18 作者:lesolorzanov

我一直在尝试在wordpress的插件中使用“建议”功能。我有一个自定义类型,当我创建一篇新文章时,我会使用一个文本输入元框,在相同类型的其他文章的标题中写入。我想使用建议功能,以便它自动完成用户正在撰写的帖子的标题。我一直在搜索,最后我在插件中添加了以下内容:

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() {
?>
<script type="text/javascript">
var se_ajax_url = \'<?php echo admin_url(\'admin-ajax.php\'); ?>\';

jQuery(document).ready(function() {
    jQuery(\'#requisitos_curso_disc\').suggest(se_ajax_url + \'?action=se_lookup\', {minchars:2});
});
</script>

<?php
}

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

function se_lookup() {

    $search = $wpdb->esc_like($_REQUEST[\'q\']);

    $loop = new WP_Query( \'s=\' . $search );

    while( $loop->have_posts() ) {
            $loop->the_post();
            echo get_the_title()."\\n";
    }

    wp_reset_query();
    wp_die();
}
但它不起作用。请帮忙?

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

为了使脚本正确排队,必须使用wp_enqueue_script 像这样:

wp_enqueue_script( \'suggest\', get_template_directory_uri() . \'/js/path/to/suggest.js\', array(\'jquery\'), \'1.0.0\', true );
第二个参数是JavaScript文件的路径,第三个参数是脚本所依赖的依赖项(由于suggest是一个jquery插件,必须在jquery之后加载)。

如果您正在使用this, 恐怕您对建议插件的调用是错误的。你先去拿条款。

我个人建议你使用jquery ui autocomplete. 我是这样实现的:

function my_autocomplete()
{
  $query = new WP_Query(array(\'post_type\'=>\'page\',\'posts_per_page\'=>-1));
  $tab = array();
  foreach ($query->posts as $p) {
    $tab[] =array(\'value\'=>$p->post_title,\'url\'=>get_the_permalink($p));
  }
  die(json_encode($tab));
}
add_action( \'wp_ajax_nopriv_my_autocomplete\', \'my_autocomplete\' );
add_action( \'wp_ajax_my_autocomplete\', \'my_autocomplete\' );
以上代码在我的函数中。php(因为你正在做一个插件,所以它可以在你的插件中)。您可以将post\\u类型更改为您想要查询的任何内容。您还必须将jquery ui排队,方法如下:

wp_register_script(\'jqui\', \'https://code.jquery.com/ui/1.11.4/jquery-ui.min.js\', array(\'jquery\')); // Conditional script(s)
wp_enqueue_script(\'jqui\'); // Enqueue it!
然后在我的页脚。php我有

<script type="text/javascript">
    var ajaxUrl = "/wp-admin/admin-ajax.php";
</script>
以定义自动完成所需的ajax url。最后,实际的javascript自动完成代码(假设您的输入具有类搜索输入):

    var data = {
        action : \'my_autocomplete\'
    }

    $.post(ajaxUrl,data,function(res){
    $( ".search-input" ).autocomplete({
      minLength: 0,
      source: function(request, response) {
                var results = $.ui.autocomplete.filter(res, request.term);

                response(results.slice(0, 10));
            }
      })
      .autocomplete( "instance" )._renderItem = function( ul, item ) {
          return $( "<li>" )
            .append( "<a href=\'"+item.url+"\'>" + item.value +"</a>" )
            .appendTo( ul );
      };
    },\'JSON\');
因此,当它加载时,它会获取您的所有页面标题并提供您的。使用页面url自动完成搜索输入。此处的设置将自动完成结果限制为10,以避免庞大的列表。

如果有大量页面,则可能无法采用此解决方案。

希望它能帮助你。

相关推荐

插件放置在/wp-content/plugins内的文件夹中时不保存值

我得到了WordPRess插件的以下代码,它在每个页面/后期编辑屏幕上添加了两个自定义输入。然后将这些值保存并输出到前端页面的标题中。如果代码位于内部,则可以正常工作。php文件并直接放入“wp内容/插件”。然而,如果我把它放在插件(如“wp-content/plugins/myplugin”)中自己的文件夹中,那么在通过编辑屏幕保存帖子/页面时,输入字段不会保存。此外,它不会向前端页面html标题部分输出任何内容。这似乎是一个被放弃的项目,所以我无法与原始开发人员一起制定解决方案。然而,代码中的某些内容