使用Wordpress的jQuery自动完成正在搜索每种帖子类型

使用Wordpress的jQuery自动完成正在搜索每种帖子类型,jquery,wordpress,jquery-ui-autocomplete,Jquery,Wordpress,Jquery Ui Autocomplete,我已经设置了一个搜索字段,用户在其中使用jquery自动完成搜索商品和服务 从我的wordpress数据库中获取帖子确实很有效,但它从wp_posts表中提取每一篇帖子 因此,它从其他类型的职位中引入了职位,而不仅仅是我想要的商品和服务 function my_search() { global $post; ob_start(); $term = strtolower( $_GET['term'] ); $suggestions = array(); $ar

我已经设置了一个搜索字段,用户在其中使用jquery自动完成搜索商品和服务

从我的wordpress数据库中获取帖子确实很有效,但它从wp_posts表中提取每一篇帖子

因此,它从其他类型的职位中引入了职位,而不仅仅是我想要的商品和服务

function my_search() {
  global $post;
  ob_start();

    $term = strtolower( $_GET['term'] );
    $suggestions = array();

    $args = array(
    'post_type' => 'goods_services',
    'posts_per_page' => '-1'
  );

  $query = new WP_Query( 's=' . $term, $args );

    if ( $query->have_posts() ) {
        while( $query->have_posts() ) {
            $query->the_post();
            $suggestion = array();
            $suggestion['label'] = get_the_title();
            $suggestion['category'] = get_field('service_class');

            $suggestions[] = $suggestion;
        }

    $response = ob_get_clean();
      wp_reset_postdata();

    $response = json_encode( $suggestions );
    echo $response;
    exit();
  }

}
add_action( 'wp_ajax_my_search', 'my_search' );
add_action( 'wp_ajax_nopriv_my_search', 'my_search' );
这是我在myfunctions.php中调用表单搜索查询的代码

这是我的搜索表单自动完成代码。它添加了一堆自定义渲染内容,但源代码正在获取functions.php代码段

(function( $ ) {
    $(function() {
        var url = MyAutocomplete.url + "?action=my_search";

        function split( val ) {
      return val.split( /,\s*/ );
    }

    function extractLast( term ) {
      return split( term ).pop();
    }

    function log( message ) {
      var dataClass = message.split(':');

      $( "<li class='selected-results_item'>" ).attr( "data-id", message ).attr("data-class", dataClass[0]).text( message ).prependTo( ".selected-results" );
    }

    // Wrap Search Results Groups
    function wrapSearchCategory() {
      var categories = {};

      $('.search-results > ul > li').each(function(){
        categories[$(this).data('class')] = "";
      });

      for (category in categories) {
        $('.search-results > ul > li').filter('[data-class="'+ category +'"]').wrapAll('<div class="results-group ready" data-class="'+ category +'"></div');
      }
    }

    // Wrap Results Groups
    function wrapResultsCategory() {

      var resultsItem = $('.selected-results_item').data('class');

      if ($('.selected-results div[data-class="'+resultsItem+'"]').length) {

        $('.selected-results_item[data-class="'+resultsItem+'"]').appendTo('.selected-results > .results-group[data-class="'+resultsItem+'"]');

      } 
      else {  

        var categories = {};

        $('.selected-results > .selected-results_item').each(function(){
          categories[$(this).data('class')] = "";
        });

        for (category in categories) {
          $('.selected-results > .selected-results_item').filter('[data-class="'+ category +'"]').wrapAll('<div class="results-group" data-class="'+ category +'"></div');
        }

      }

      // Add category title to groups
      $(".selected-results > .results-group").each(function() {
        if ($(this).children('.results-category').length){
          return false;
        } 
        else {
          $(this).prepend('<li class="results-category" data-class="'+ category +'">'+ category +'<span class="show-more"></span></li>');
        } 
      });

      // Add category title to groups
      $(".selected-results > .results-group").each(function() {
        if ($(this).children('.results-category').length){
          return false;
        } 
        else {
          $(this).prepend('<li class="results-category" data-class="'+ category +'">'+ category +'<span class="show-more"></span></li>');
        } 
      });
    }

    // Show class category
    $.widget( "custom.catcomplete", $.ui.autocomplete, {
      _create: function() {
        this._super();
        this.widget().menu( "option", "items", "> :not(.results-category)" );
      },
      _renderMenu: function( ul, items ) {
        var that = this,
            currentCategory = "";

        $.each( items, function( index, item ) {
          var li;
          if ( item.category != currentCategory ) {
            ul.append( "<li class='results-category' data-class='"+ item.category +"'>" + item.category + "<span class='show-more'></span></li>" );
            currentCategory = item.category;
          }
          li = that._renderItemData( ul, item );
          if ( item.category ) {
            li.attr( "data-item", item.category + ": " + item.label );
          }
        });
      },
      _renderItem: function( ul, item ) {
            return $( "<li>" )
            .attr( "data-class", item.category )
            .attr( "data-value", item.value )
            .append( $( "<a>" ).text( item.label ) )
            .appendTo( ul );
        }
    });

        $("#autocomplete")
        // don't navigate away from the field on tab when selecting an item
    .on( "keydown", function( event ) {
      if ( event.keyCode === $.ui.keyCode.TAB &&
          $( this ).autocomplete( "instance" ).menu.active ) {
        event.preventDefault();
      }
    })
        .catcomplete({
            source: url,
            appendTo: ".search-results",
      search: function() {
        // custom minLength
        var term = extractLast( this.value );
        if ( term.length < 2 ) {
          return false;
        }

        setTimeout(function() { 
          wrapSearchCategory();
        }, 1000);
      },
      focus: function() {
        // prevent value inserted on focus
        return false;
      },
      select: function( event, ui ) {
        log(ui.item.category + ': ' + ui.item.value);
        setTimeout(function() { 
          wrapResultsCategory();
          update();
        }, 150);
        return false;
      },
      close: function (event, ui) {
        if (!$("ul.ui-autocomplete").is(":visible")) {
          $("ul.ui-autocomplete").show();
        }
      }
        }); 
    });

})( jQuery );


(函数($){
$(函数(){
var url=MyAutocomplete.url+“?操作=我的搜索”;
功能拆分(val){
返回val.split(/,\s*/);
}
功能提取最后(学期){
返回拆分(term.pop();
}
功能日志(消息){
var dataClass=message.split(“:”);
$(“
  • ”).attr(“数据id”,消息).attr(“数据类”,数据类[0]).text(消息).prependTo(“.selected results”); } //包装搜索结果组 函数wrapSearchCategory(){ 变量类别={}; $('.search results>ul>li')。每个(函数(){ 类别[$(this).data('class')]=“”; }); 用于(类别中的类别){ $('.search results>ul>li').filter('[data class=“'+category+'”]).wrapAll('.results group[data class=“'+resultsItem+'”]); } 否则{ 变量类别={}; $('.selected-results>.selected-results_item')。每个(函数(){ 类别[$(this).data('class')]=“”; }); 用于(类别中的类别){
    $('.selected-results>.selected-results_item').filter('[data class=“'+category+'“]).wrapAll('我必须在术语之前运行我的参数,因此我将搜索术语包含在参数中

    $args = array(
        's' => $term,
        'post_type' => 'goods_services',
        'posts_per_page' => '-1'
      );
    
      $query = new WP_Query( $args );