在摘录中突出显示搜索词

时间:2017-07-20 作者:ksqInFlightM

SearchResultsPage

我设计并开发了一个反应迅速的Wordpress网站,该网站几乎可以为演员兼制片人的客户发布了。我已经三天没有满足搜索结果页面的要求了。

我的摘录太长了,无论搜索的是什么,都包含了来自主页的重复文本。在搜索结果的帖子和页面的白色链接下,我想要一个不超过30个单词的摘录,其中包括突出显示的搜索关键字(在本例中,搜索关键字为“Ginsberg”)。因此,一段大约30个单词的片段,包括突出显示的搜索词。这就是我不能得到的。当我有了它,我就有了我想要的搜索页面。

我花了几个小时在堆栈交换和堆栈溢出上搜索这个,并试图找到自己需要的PHP逻辑,但失败了。因此,如果这里已经有了解决方案,那么它就隐藏得很好!!

我所拥有的和我满意的是:假设我在搜索垮掉的诗人“金斯伯格”(附屏幕截图)。我得到一个主标题,上面写着“金斯伯格的2个结果”。下面有一个小标题“你的金斯伯格搜索结果可以在“”找到”,然后在下面我得到了一个样式很好的列表,其中包含指向两个相关页面的两个链接。我想要所有这些。那太好了。

我的搜索表单:

<div class="search-cont">                         
        <form class="searchinput" method="get" action="<?php echo home_url(); ?>" role="search">
        <input type="search" class="searchinput" placeholder="<?php echo esc_attr_x( \'Click icon or hit enter to search..\', \'placeholder\' ) ?>" value="<?php get_search_query() ?>" name="s" title="<?php echo esc_attr_x( \'Search for:\', \'label\' ) ?>" />
        <button type="submit" role="button" class="search-btn"/><i class="fa fa-search" aria-hidden="true"></i></button>
        </form>
        </div>
===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-=-我的搜索页面:

<div class="searchresultsbox"> 
                  <?php global $wp_query;?>
      <h2> <?php echo $wp_query->found_posts; ?><?php _e( \' results found for\', \'locale\' ); ?>: "<?php the_search_query(); ?>"</h2>
                <?php if ( have_posts() ) { ?>
            <h3><?php printf( __( \'Your "%s" search results can be found at:\', \'ptpisblogging\' ), get_search_query() ); ?></h3>
            <?php while ( have_posts() ) { the_post(); ?>
                 <h3><a href="<?php echo get_permalink(); ?>">
                   <?php the_title();  ?>
                 </a></h3> 
                 <?php //echo substr(get_the_excerpt(), 0, 2); ?>
                 <div class="h-readmore"> <a href="<?php //the_permalink(); ?>"></a></div>
               <?php
 $args=array(\'s\'=>\'test\',\'order\'=> \'DESC\', \'posts_per_page\'=>get_option(\'posts_per_page\'));
   $query=new WP_Query($args);
  if( $query->have_posts()): 
  while( $query->have_posts()): $query->the_post();
 {
   echo $post->post_title;
   echo $post->post_content;
 }
 endwhile; 
 else:
 endif;
 ?>
 <?php } ?>
 <?php paginate_links(); ?>
        <?php } ?>
    </div>
  </div>
</div>
<param name="" value="">
                </div><!-- /searchresultsbox -->
            </div><!-- /collcelltwo -->
        </div><!-- /tb-one-row --> 
    </div><!-- /tb-one -->
===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-===-=-函数。php\'

add_action( \'pre_get_posts\', function( $query ) {
        // Check that it is the query we want to change: front-end search query
        if( $query->is_main_query() && ! is_admin() && $query->is_search() ) {
        // Change the query parameters
        $query->set( \'posts_per_page\', 4 );
        }
        } );
我非常感谢你的意见。非常感谢。基思

3 个回复
SO网友:Rick Hellewell

使用str\\u replace替换要在单词周围加亮显示的所有单词。类似于

// $searchresult = result of search process, 
//$highlightword = word you want to highlight
$searchresult = str_replace( $highlightword, 
     "<span style=\'background-color:#ffff00;\'>$highlightword</span>",
      $searchresult );
将背景颜色调整为要使用的颜色。

要限制搜索结果中的字数,请参阅类似问题的答案:https://stackoverflow.com/questions/965235/how-can-i-truncate-a-string-to-the-first-20-words-in-php .

已编辑:将背景颜色更改为黄色(#ffff00);

SO网友:Gopala krishnan

这将对你有帮助。。。在函数中使用此代码。php

function wps_highlight_results($text){
     if(is_search()){
          $sr = get_query_var(\'s\');
          $keys = explode(" ",$sr);
          $text = preg_replace(\'/(\'.implode(\'|\', $keys) .\')/iu\', \'<strong class="search-excerpt">\'.$sr.\'</strong>\', $text);
     }
     return $text;
}
add_filter(\'the_excerpt\', \'wps_highlight_results\');

SO网友:Alina

在搜索页面中,在此循环之后

<?php if( have_posts() ) : while( have_posts() ) : the_post() ?>
添加此

<?php 
$excerpt = get_the_excerpt(); 
$keys    = explode(" ",$s); 
$excerpt = preg_replace(
    \'/(\'.implode(\'|\', $keys) .\')/iu\', 
    \'<strong class="search-excerpt">\\0</strong>\', 
    $excerpt
); 
?>
在要查看摘录的位置添加添加此

<?php echo $excerpt; ?>

结束

相关推荐

Custom Search Results Page

我正在尝试创建自定义搜索结果页面。我不允许直接编辑php文件。我一直在使用[include\\u php]短代码来编写尽可能少的php代码。我试图让用户远离默认的“帖子”页面,因此,当用户搜索时,我想要一个自定义页面,将用户链接到我自己构建的页面,而不是相应的帖子页面。有没有办法不用编辑php文件就能做到这一点?