通过Cookie记录WordPress用户的搜索历史

2021-05-22 0 1,480 百度已收录

最近需要纪录每个用户在WordPress网站上的搜索历史,思量到需求对照简朴,决议接纳Cookies来实现。在这里简朴分享下方式,有些细节就需要自己去修改和完善了。
通过Cookie记录WordPress用户的搜索历史
如上图加框部门所示,我们要纪录并输出用户的搜索纪录,还要添加一个清空搜索历史的功效。

  1.     /**
  2.      * 通过Cookie记任命户搜索纪录
  3.      */
  4.     function wpkj_set_recently_searches(){
  5.         //仅在前端搜索页面执行
  6.         if ( is_search() && !is_admin() ) {
  7.             $search_term = get_search_query();
  8.             if( $search_term ) $search_term = trim( $search_term );
  9.             //若是搜索字段不存在或为空,不继续
  10.             if( !$search_term || $search_term === '') return;
  11.             //检查并设置搜索历史数组
  12.             $recently_searches = array();
  13.             if(isset($_COOKIE['wpkj_recently_searches'])) {
  14.                 $recently_searches = explode(',', $_COOKIE['wpkj_recently_searches'], 20);
  15.             }
  16.             if(!in_array( $search_term, $recently_searches)){
  17.                 $recently_searches[] = $search_term;
  18.             }
  19.             //设置cookie为30天
  20.             setcookie('wpkj_recently_searches', implode(',', $recently_searches), current_time('timestamp') + (86400*30), "/");
  21.         }
  22.     }
  23.     add_action( 'wp', 'wpkj_set_recently_searches', 20 );

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

获取并输出用户的搜索纪录

  1.     /**
  2.      * 获取用户最近搜索纪录
  3.      */
  4.     function wpkj_get_recently_searches( $limit = 10, $title = false ){
  5.         $recently_searches = array();
  6.         if(isset($_COOKIE['wpkj_recently_searches'])) {
  7.             $recently_searches = explode(',', $_COOKIE['wpkj_recently_searches']);
  8.             //将搜索纪录倒序
  9.             $recently_searches = array_reverse($recently_searches);
  10.             if( !emptyempty($recently_searches) ) {
  11.                 $html = '<div class="recently-searches">';
  12.                 if( $title ) $html .= '<h2 class="searches-title recently-searches-title">'. htmlspecialchars($title) .'</h2>';
  13.                 $html .= '<ul class="recently-searches-ul">';
  14.                 $home_url_slash = get_option('home') . '/';
  15.                 $i = 1;
  16.                 foreach( $recently_searches as $result ) {
  17.                     $html .= '<li class="search-item"><a href="'. $home_url_slash . '?s=' . $result . '" rel="external nofollow" >'. htmlspecialchars($result) .'</a></li>';
  18.                     $i++;
  19.                 }
  20.                 $html .= '</ul>';
  21.                 $html .= '<div class="recently-searches-del">'.__( 'Clear search history', THEME_SLUG ).'</div>';
  22.                 $html .= '</div>';
  23.                 return $html;
  24.             }
  25.         }
  26.     }

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

  1.     if(function_exists('wpkj_get_recently_searches')) {
  2.         echo wpkj_get_recently_searches( 10, '搜索历史');
  3.     }

清空当前用户搜索历史

这里通过js方式实现:

  1.     //添加一个js函数用于删除cookie
  2.     function delCookie(name) {
  3.         var exp = new Date();
  4.         exp.setTime(exp.getTime() - 1);
  5.         var cval = getCookie(name);
  6.         if (cval != null) document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
  7.     }
  8.     //很负疚,这里接纳的是jquery操作
  9.     jQuery(document).ready(function($) {
  10.         $(".recently-searches-del").on("click", function() {
  11.             //删除cookie
  12.             delCookie("wpkj_recently_searches");
  13.             //隐去搜索历史部门的内容
  14.             $(".recently-searches").fadeOut();
  15.         });
  16.     });

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

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

请注重下js文件的路径,上面的代码示意我将 recently-searches.js 放在了当前主题的 /assets/js 目录下,你需要凭证自己的现实修改这个路径。到这里就OK了。代码照样有可以优化的空间,就靠人人自己折腾了

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!3308869544
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理,有奖励!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有猫币奖励和额外收入!

主题镇 WP教程 通过Cookie记录WordPress用户的搜索历史 https://zhutizhen.com/14837.html

永远为用户服务的镇长!

常见问题
  • 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或联络我们。
查看详情

相关文章