Wordpress搜索无法使用超过87个字符的搜索字词

时间:2016-08-09 11:54:04

标签: php wordpress

我有以下Wordpress搜索设置:

search_form.php

 <input type="text" class="search_form clearable" name="s" id="s" autocomplete="off" placeholder="Search Text" />

的search.php

 <?php if ( have_posts() && strlen( trim(get_search_query()) ) != 0 ) :
        while ( have_posts() ) :
        set_query_var( 'boxclass', 'full horizontal');
               the_post();
              .
              .
              .
        // If no content, include the "No posts found" template.
        else :
           echo '<div>No search results found</div>';
        endif;
   ?>

现在,

当我搜索 87 字符的文字时,请说:

“Lorem ipsum dolor sit amet,consectetuer adipiscing elit.Aenean commodo ligula eget dolor.Aenean massa.Cum sociis natoque penatibus et magnis dis parturient montes,nascetur ridiculus mus.Donec quam felis,ultricies nec,pellentesque eu,pretium quis, sem.Nulla consequat massa quis enim.Donec pede justo,fringilla vel,aliquet nec,vulputate eget,arcu.in enim justo,rhoncus ut,imperdiet a,venenatis vitae,justo.Nullam dictum felis eu pede mollis pretium。整数tincidunt。克拉斯dapibus.Vivamus elementum semper nisi。Aenean vulputate eleifend tellus.Aenean leo ligula,porttitor eu,consequat“

找到了结果。

当我搜索 88 字符的文字字符串时,请说:
“Lorem ipsum dolor sit amet,consectetuer adipiscing elit.Aenean commodo ligula eget dolor.Aenean massa.Cum sociis natoque penatibus et magnis dis parturient montes,nascetur ridiculus mus.Donec quam felis,ultricies nec,pellentesque eu,pretium quis,sem.Nulla cosqua Massa quis enim.Donec pede justo,fringilla vel,aliquet nec,vulputate eget,arcu.in enim justo,rhoncus ut,imperdiet a,venenatis vitae,justo.Nullam dictum felis eu pede mollis pretium。整数tincidunt .Cras dapibus.Vivamus元素semper nisi。Aenean vulputate eleifend tellus.Aenean leo ligula,porttitor eu,consequata“

返回:未找到搜索结果

如何解决这个问题? Wordpress搜索词长度是否有限制?

2 个答案:

答案 0 :(得分:2)

看起来你正在达到PHP最大参数legth限制,与wordpress无关。

请参阅此Max size of URL parameters in _GET

答案 1 :(得分:1)

我发现了问题的问题。 问题在于WP Core文件,其中进行实际搜索,即

  

wp-includes / query.php =&gt;函数 parse_search (){.....}

问题在:

if ( empty( $q['search_terms'] ) || count( $q['search_terms'] ) > 9 ){                    
                     $q['search_terms'] = array( $q['s'] );
                    }
  
    

即。根据WP Core方法,如果搜索字符串中包含所有单词,即搜索条件&#39; (不包括在query.php中的函数 parse_search_terms ()下过滤的/ etc /等类型词)count:

  
     
      
  • 1-9,将搜索字符串拆分为单个单词,并在posts表标题和内容中单独搜索所有搜索词(使用LIKE子句),这些词与AND组合在一起
  •   

例如:

 ((test_posts.post_title LIKE '%Officers%') OR (test_posts.post_content LIKE '%Officers%')) AND ((test_posts.post_title LIKE '%Manager%') OR (test_posts.post_content LIKE '%Manager%'))
  
      
  • 0或&gt; 9,搜索字符串在DB
  • 中作为单个完整字符串进行搜索   

对于前。

((test_posts.post_title LIKE '%Officers and Managers are working and coordinating into an atmosphere of healthy development in the year 1982 of bright age%') OR (test_posts.post_content LIKE '%Officers and Managers are working and coordinating into an atmosphere of healthy development in the year 1982 of bright age%'))

现在,就我而言,  *在86个字符中,我的搜索字词数组为9,因此每个搜索字词都在SQL DB中单独搜索,所有搜索都是&#34; AND&#34; ed。  *在87个字符中,我的搜索字词数组为10,因此最终搜索字词不会被拆分为单个字词,而是作为单个字符串进行搜索。并且由于DB中的字符串之间有一个html标记,因此作为单个字符串,它不会给出结果。

因此,这不是字符的数量,而是 $ q [&#39; search_terms&#39;] 中的字数,这构成了逻辑差异。

希望它有所帮助。谢谢