2016-07-14 65 views
0

我试图在使用PHP脚本的wordpress网站上设置自动完成。但是目前我的代码中没有显示任何内容。我明白,一般的想法是有一个jQuery函数,它会使用PHP脚本来提取MySQL数据(suggest.php)。另外如果我要把WordPress中的jQuery自动完成

<script> 
    $(function() { 
    $("#tags").autocomplete({ 
     source: 'suggest.php', 
     minLength:1 

    }); 
    }); 
</script> 

在myScript.js下的js文件夹下,我将如何访问它?我的完整代码如下...

<link rel="stylesheet" href="//code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css"> 
<link rel="stylesheet" href="/resources/demos/style.css"> 
<script src="https://code.jquery.com/jquery-1.12.4.js"></script> 
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script> 
<script> 
    $(function() { 
    $("#tags").autocomplete({ 
     source: 'suggest.php', 
     minLength:1 

    }); 
    }); 
</script> 

<form action="" method="post"> 
Name: <input type="text" name="tags" id="tags" value="<?php echo isset($_POST['tags']) ? $_POST['tags'] : '' ?>"/> 
</form> 

回答

0

首先,不包括整个jquery-ui,这是完全没有必要的。

其次,不要手动放置脚本。这就是为什么WordPress有enqueuing

首先,您需要将脚本排入自动完成的位置,并且必须依赖于自动完成。因此,在您functions.php你把

add_action('after_setup_theme', 'yourtheme_theme_setup'); 

if (! function_exists('yourtheme_theme_setup')) { 
    function yourtheme_theme_setup() { 

     add_action('wp_enqueue_scripts', 'yourtheme_frontend_scripts'); 

    } 
} 

if (! function_exists('yourtheme_frontend_scripts')) { 
    function yourtheme_frontend_scripts() { 

     wp_enqueue_script('yourtheme_custom', get_template_directory_uri().'/js/custom.js', array('jquery-ui-autocomplete', 'jquery'), '1.0.0', true); 

     wp_localize_script('yourtheme_custom', 'yourtheme_autocomplete', array(
      'autocomplete' => json_encode($results_array), // Results array contains all your autocomplete words 
     )); 
    } 
} 

你怎么打电话给你.js文件是由你。我把它称为custom.js,并把它放在主题中的/ js文件夹中。

您还需要一个$results_array,其中包含您的所有自动完成单词。我通常手动把它们,或者如果需要查询数据库。

然后在你的custom.js你会把这样的事情:

jQuery(document).ready(function($) { 
    "use strict"; 

    var autocomplete_terms = JSON.parse(yourtheme_autocomplete.autocomplete); 


    $('#tags').autocomplete({ 
     source: autocomplete_terms, 
     minLength: 1 
    }); 

}); 

应该工作的罚款。一个很酷的补充是,如果你有口音或拉丁扩展术语是将它们添加到口音地图

jQuery(document).ready(function($) { 
    "use strict"; 

    var autocomplete_terms = JSON.parse(yourtheme_autocomplete.autocomplete); 

    var accentMap = { 
     "ä": "a", 
     "ö": "o", 
     "å": "a", 
     "č": "c" 
    }; 

    var normalize = function(term) { 
     var ret = ""; 
     for (var i = 0; i < term.length; i++) { 
      ret += accentMap[ term.charAt(i) ] || term.charAt(i); 
     } 
     return ret; 
    }; 

    $('#tags').autocomplete({ 
     source: function(request, response) { 
      var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); 
      response($.grep(autocomplete_terms, function(value) { 
       value = value.label || value.value || value; 
       return matcher.test(value) || matcher.test(normalize(value)); 
      })); 
     } 
    }); 

}); 

希望这会有所帮助。

+0

因此,根据这个解决方案,我们将设置函数,它将利用MySQL查询文件中的results_array作为functions.php中的suggest.php并设置custom.js? 我怎么enque custom.js在PHP页面? 这个参数对于 的参数“wp_enqueue_script案件? – findataguy

+0

我不确定你的'suggest.php'文件的内容是什么,但'$ results_array'需要是一个数组。无论您是手动编写该数组,还是创建将以数组形式返回结果的查询都不重要。让数组传递给JavaScript文件非常重要。 enqueue部分在我的代码中给出。将它粘贴到你的'functions.php'中,你将有'custom.js'入队(确保它位于指定位置)。我忘了用'get_template_directory_uri()'函数替换'TEMPPATH'常量。我现在要修复它 –

+0

所以基本上我觉得有了基本的想法并设置了自动完成。但我有两个问题。其中一个我无法从'suggest.php'获得源代码,其中'json-encoded'列表将被'echo'。如果我要手动输入数组,自动完成列表不会在第一次输入时显示,但如果我点击提交按钮,它就会显示出来。基本上我的custom.js文件看起来像这样 – findataguy