WordPress纯代码实现百度收录查询和前端显示

原创 admin  2022-09-19 08:35  阅读 0 次

搜索引擎收录情况如果直接使用实时查询然后在文章或后台展示,会拖累网站加载速度。找了一个本地数据库版的,将查询结果保存到本地,从本地读取显示,当查询结果大于设定的时间后,自动进行查询结果更新。

本方法可实现查询结果自由显示,可在后台文章列表显示,也可在文章也显示,取舍可自行决定,但是,一定要注意,插入代码会增加文章前端使用数据库的查询次数和占用服务器内存,经过测试,内存使用率会增加!

如果你使用的是虚拟主机建站,而且,内存不是很大的话,建议不安装此代码,以免拖慢网站打开速度!

1、将下列代码放到主题的 functions 文件内。

  1. /**
  2. ==================================================
  3. *百度收录查询、本地保存、定时更新 
  4. ==================================================
  5. **/
  6. //在数据库创建自定义表,用于存储百度收录查询数据;
  7. function my_table_install () {
  8.     global $wpdb;
  9.     $table_name = $wpdb->prefix . "record";  //获取表前缀,并设置新表的名称
  10.     if($wpdb->get_var("show tables like $table_name") != $table_name) {  //判断表是否已存在
  11.         $sql = "CREATE TABLE " . $table_name . " (
  12.     id mediumint(9) NOT NULL AUTO_INCREMENT,
  13.     post_id bigint(20) UNSIGNED NOT NULL DEFAULT '0',
  14.     record_time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
  15.     record_name tinytext NOT NULL,
  16.     value text NOT NULL,
  17.     UNIQUE KEY id (id)
  18.           );";
  19.         require_once(ABSPATH . "wp-admin/includes/upgrade.php");  //引用wordpress的内置方法库
  20.         dbDelta($sql);
  21.     }
  22. }
  23. my_table_install ();
  24. function checkBaidu($url) {
  25.     $url = 'https://www.baidu.com/s?wd=' . urlencode($url); 
  26.     $curl = curl_init();
  27.     curl_setopt($curl, CURLOPT_URL, $url);
  28.     curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  29.     $rs = curl_exec($curl);
  30.     curl_close($curl);
  31.     if (!strpos($rs, '提交网址')) { //没有找到说明已被百度收录 
  32.         return 1;
  33.     }else{return 0;}
  34. }
  35. function checkssl($url) {
  36.     $url = 'https://www.so.com/s?q=' . urlencode($url); 
  37.     $curl = curl_init();
  38.     curl_setopt($curl, CURLOPT_URL, $url);
  39.     curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  40.     $rs = curl_exec($curl);
  41.     curl_close($curl);
  42.     if (!strpos($rs, '找不到该URL')) { //没有找到说明已被360收录 
  43.         return 1;
  44.     }else{return 0;}
  45. }
  46. function baidurecord($surl){
  47.     global $wpdb;
  48.     $post_id =get_the_ID();
  49.     $days = 7;
  50.     $today = current_time('mysql'); //获取今天日期时间
  51.     $daysago = date( "Y-m-d H:i:s", strtotime($today) - ($days * 24 * 60 * 60) );  //Today - $days
  52.     $results1 = $wpdb->get_results("SELECT * FROM wp_record where post_id = '$post_id' and record_name = 'baidu_record'");
  53.     if(empty($results1)){
  54.        if(checkBaidu($surl)==1 ){
  55.    $data = array('post_id'=> $post_id,'record_time'=> $today,'record_name'=> 'baidu_record','value'=> '1',);
  56.            $wpdb->insert($wpdb->prefix ."record",$data);
  57.    return 1;
  58.        }
  59. else {
  60.    $data = array('post_id'=> $post_id,'record_time'=> $today, 'record_name'=> 'baidu_record','value'=> '0',);
  61.            $wpdb->insert($wpdb->prefix ."record",$data);
  62.    return 0;
  63.        }
  64.      }
  65.      else {
  66.         $results2 = $wpdb->get_results("SELECT value FROM wp_record WHERE record_time > '$daysago' and post_id = '$post_id' and record_name = 'baidu_record'");
  67.            if(empty($results2)){
  68.      if(checkBaidu($surl)==1 ){
  69. $data1 = array('record_time'=> $today,'value'=> '1');
  70.                 $data2 = array('post_id'=> $post_id,'record_name' => 'baidu_record' );
  71.              $wpdb->update($wpdb->prefix ."record",$data1,$data2);
  72. return 1;
  73.      }else{
  74. $data1 = array('record_time'=> $today,'value'=> '0' );
  75.              $data2 = array('post_id'=> $post_id,'record_name' => 'baidu_record');
  76.              $wpdb->update($wpdb->prefix ."record",$data1,$data2);
  77. return 0;
  78.      }
  79. }
  80. else{
  81.   if($results2[0]->value == 1){return 1;}
  82.   else{return 0;}
  83. }
  84.     }
  85. }
  86. function sslrecord($slurl){
  87.     global $wpdb;
  88.     $post_id =get_the_ID();
  89.     $days = 7;
  90.     $today = current_time('mysql'); //获取今天日期时间
  91.     $daysago = date( "Y-m-d H:i:s", strtotime($today) - ($days * 24 * 60 * 60) );  //Today - $days
  92.     $results1 = $wpdb->get_results("SELECT * FROM wp_record where post_id = '$post_id' and record_name = '360_record'");
  93.     if(empty($results1)){
  94. if(checkssl($slurl)==1 ){
  95.    $data = array('post_id'=> $post_id,'record_time'=> $today, 'record_name'=> '360_record','value'=> '1',);
  96.            $wpdb->insert($wpdb->prefix ."record",$data);
  97.    return 1;
  98. }
  99. else {
  100.            $data = array( 'post_id'=> $post_id,'record_time'=> $today, 'record_name'=> '360_record','value'=> '0', );
  101.            $wpdb->insert($wpdb->prefix ."record",$data);
  102.    return 0;
  103. }
  104.     }
  105.     else{
  106.         $results2 = $wpdb->get_results("SELECT * FROM wp_record WHERE record_time > '$daysago' and post_id = '$post_id' and record_name = '360_record'");
  107.         if(empty($results2)){
  108.    if(checkssl($slurl)==1 ){
  109. $data1 = array('record_time'=> $today,'value'=> '1');
  110.                 $data2 = array('post_id'=> $post_id,'record_name' => '360_record' );
  111.              $wpdb->update($wpdb->prefix ."record",$data1,$data2);
  112. return 1;
  113.    }else
  114. {
  115. $data1 = array('record_time'=> $today,'value'=> '0' );
  116.              $data2 = array('post_id'=> $post_id,'record_name' => '360_record');
  117.              $wpdb->update($wpdb->prefix ."record",$data1,$data2);
  118. return 0;
  119.    }
  120. }
  121. else{
  122.     if($results2[0]->value == 1){return 1;}
  123.     else{return 0;}
  124. }
  125.     }
  126. }
  127. function baidu_record() {
  128.     if(baidurecord(get_permalink()) == 1) {
  129.         echo '<a>百度已收录</a>';
  130.    } else {
  131.         echo '<a style="color:red;" rel="external nofollow noopener noreferrer" title="点击提交,谢谢您!" target="_blank" href="http://zhanzhang.baidu.com/sitesubmit/index?sitename='.get_permalink().'">百度未收录</a>';
  132.    }
  133. }
  134. function ssl_record() {
  135.     if(sslrecord(get_permalink()) == 1) {
  136.         echo '<a>360已收录</a>';
  137.    } else {
  138.         echo '<a style="color:red;" rel="external nofollow noopener noreferrer" title="点击提交,谢谢您!" target="_blank" href="http://info.so.com/site_submit.html">360未收录</a>';
  139.    }
  140. }

2、编辑当前主题下的文章模板(一般是single.php),在想要显示收录结果的位置添加如下代码并保存:

  1. <?php echo baidu_record(); ?>

如果不想给其他人看到这个收录情况,可以加上一个判断语句,具体代码如下:

  1. <?php if ( is_user_logged_in()){baidu_record();ssl_record();}?>

3、如果想在后台文章列表显示百度收录情况的话,将下来代码放到主题functions文件最后一行的?>之前。

  1. /1~ 在后台文章列表增加1列数据,展示百度收录情况
  2. add_filter( 'manage_posts_columns', 'yy_customer_posts_columns' );
  3. function yy_customer_posts_columns( $columns ) {
  4.   $columns['baidurecord'] = '百度收录';
  5.   $columns['baidurecord'] = '360收录';
  6.   return $columns;
  7. }
  8. //2~ 输出查询结果
  9. add_action('manage_posts_custom_column', 'yy_customer_columns_value', 102);
  10. function yy_customer_columns_value($column, $post_id){
  11.     if($column=='baidurecord'){
  12. $baidurecord = $wpdb->get_var("SELECT value FROM wp_record WHERE post_id = '$post_id' and record_name = 'baidu_record'");
  13. if($baidurecord == 1) {
  14.             echo Yes;
  15.         }else{echo No;}
  16. }
  17.     if($column=='sslrecord'){
  18. $sslrecord = $wpdb->get_var("SELECT value FROM wp_record WHERE post_id = '$post_id' and record_name = '360_record'");
  19. if($sslrecord == 1) {
  20.             echo Yes;
  21.         }else{echo No;}
  22. }
  23.     return;
  24. }

经测试,查询结果并非完全准确,也会有部分结果显示不对,但是,因为服务器查询节点的问题,不过,大部分查询结果是准确的!

本文中所用代码在此处一键下载:shoulu.zip

来源:https://www.huanp.com/seoyouhua/22273.html
声明:欢迎分享本文,转载请保留出处!

发表评论


表情