318
数据统计:302个主题分类,12917个优秀站点,1个站点正在排队审核,447篇站长资讯
  • 本网站目录提供网站快速收录服务,无需添加友情链接,无需等待漫长审核,1元/站1元收录淘宝购买 客服:点击这里给我发消息

  • 当前位置:站长分类目录 » 站长资讯 » 建站程序 » WordPress » 文章详细 订阅RssFeed

    wordpress记录搜索历史

    来源:站长分类目录 浏览:535次 时间:2022-03-22

    1,最近项目需要记录每个用户在WordPress网站上的搜索历史,考虑到需求比较简单,决定采用Cookies来实现。在这里简单分享下方法,有些细节就需要自己去修改和完善了。如下图红框部分所示,我们要记录并输出用户的搜索记录,还要添加一个清空搜索历史的功能。


    wordpress记录搜索历史

    2,将用户搜索记录写入Cookie

    在下面的代码中,我们封装了一个 wpkj_set_recently_searches 函数,然后将该函数挂载到 wp 钩子中执行。

    /**
    *通过Cookie记录用户搜索记录
    */
    functionwpkj_set_recently_searches(){
    
    //仅在前端搜索页面执行
    if(is_search()&&!is_admin()){
    
    $search_term=get_search_query();
    
    if($search_term)$search_term=trim($search_term);
    //如果搜索字段不存在或为空,不继续
    if(!$search_term||$search_term==='')return;
    
    //检查并设置搜索历史数组
    $recently_searches=array();
    if(isset($_COOKIE['wpkj_recently_searches'])){
    $recently_searches=explode(',',$_COOKIE['wpkj_recently_searches'],20);
    }
    if(!in_array($search_term,$recently_searches)){
    $recently_searches[]=$search_term;
    }
    //设置cookie为30天
    setcookie('wpkj_recently_searches',implode(',',$recently_searches),current_time('timestamp')+(86400*30),"/");
    }
    }
    add_action('wp','wpkj_set_recently_searches',20);
    在上面的代码中,我们封装了一个wpkj_set_recently_searches函数,然后将该函数挂载到wp钩子中执行。
    
    获取并输出用户的搜索记录
    /**
    *获取用户最近搜索记录
    */
    functionwpkj_get_recently_searches($limit=10,$title=false){
    
    $recently_searches=array();
    if(isset($_COOKIE['wpkj_recently_searches'])){
    $recently_searches=explode(',',$_COOKIE['wpkj_recently_searches']);
    //将搜索记录倒序
    $recently_searches=array_reverse($recently_searches);
    if(!empty($recently_searches)){
    $html='<divclass="recently-searches">';
    if($title)$html.='<h2class="searches-titlerecently-searches-title">'.htmlspecialchars($title).'</h2>';
    $html.='<ulclass="recently-searches-ul">';
    $home_url_slash=get_option('home').'/';
    $i=1;
    foreach($recently_searchesas$result){
    
    $html.='<liclass="search-item"><ahref="'.$home_url_slash.'?s='.$result.'">'.htmlspecialchars($result).'</a></li>';
    $i++;
    }
    $html.='</ul>';
    
    $html.='<divclass="recently-searches-del">'.__('Clearsearchhistory',THEME_SLUG).'</div>';
    
    $html.='</div>';
    
    return$html;
    }
    }
    }

    3,获取并输出用户的搜索记录

    /**
    *获取用户最近搜索记录
    */
    functionwpkj_get_recently_searches($limit=10,$title=false){
    
    $recently_searches=array();
    if(isset($_COOKIE['wpkj_recently_searches'])){
    $recently_searches=explode(',',$_COOKIE['wpkj_recently_searches']);
    //将搜索记录倒序
    $recently_searches=array_reverse($recently_searches);
    if(!empty($recently_searches)){
    $html='<divclass="recently-searches">';
    if($title)$html.='<h2class="searches-titlerecently-searches-title">'.htmlspecialchars($title).'</h2>';
    $html.='<ulclass="recently-searches-ul">';
    $home_url_slash=get_option('home').'/';
    $i=1;
    foreach($recently_searchesas$result){
    
    $html.='<liclass="search-item"><ahref="'.$home_url_slash.'?s='.$result.'">'.htmlspecialchars($result).'</a></li>';
    $i++;
    }
    $html.='</ul>';
    
    $html.='<divclass="recently-searches-del">'.__('Clearsearchhistory',THEME_SLUG).'</div>';
    
    $html.='</div>';
    
    return$html;
    }
    }
    }

    wpkj_get_recently_searches函数有两个参数,第一个为调用的个数,第二个为标题。然后我们可以在需要输出搜索记录的地方,使用下面的代码即可:

    if(function_exists('wpkj_get_recently_searches')){
    echowpkj_get_recently_searches(10,'搜索历史');
    }

    4,清空当前用户搜索历史这里通过js方式实现:

    //添加一个js函数用于删除cookie
    functiondelCookie(name){
    varexp=newDate();
    exp.setTime(exp.getTime()-1);
    varcval=getCookie(name);
    if(cval!=null)document.cookie=name+"="+cval+";expires="+exp.toGMTString();
    }
    
    //很抱歉,这里采用的是jquery操作
    jQuery(document).ready(function($){
    $(".recently-searches-del").on("click",function(){
    //删除cookie
    delCookie("wpkj_recently_searches");
    //隐去搜索历史部分的内容
    $(".recently-searches").fadeOut();
    });
    });

    你可以将上面的js代码添加到一个js文件中,比如命名为 recently-searches.js,然后可以通过下面的代码引入:

    //引入搜索历史js
    functionwpkj_recently_searches_scripts(){
    wp_enqueue_script('recently_searches',get_template_directory_uri().'/assets/js/recently-searches.js',array('jquery'),'',true);
    }
    add_action('wp_enqueue_scripts','wpkj_recently_searches_scripts');

    请注意下js文件的路径,上面的代码表示我将 recently-searches.js 放在了当前主题的 /assets/js 目录下,你需要根据自己的实际修改这个路径。

    到这里就OK了。代码还是有可以优化的空间,就靠大家自己折腾了。

    版权声明:
    1、本文内容由网友自发贡献,版权归原作者所有。
    2、本站仅提供文章发布平台,文章的内容与本站无关,请真伪自辩,本站不承担相应法律责任。
    3、如发现本站有涉嫌抄袭侵权的内容,请举报并提供相关证据,一经查实,本站将立刻删除侵权内容。
    4、转载请注明本文地址:http://www.z-ml.com/artinfo/112.html