»

百度结构化插件严重影响后台文章发布和更新时间

    WordPress  
WordPress插件浏览器插件腾讯云加速SEOwindows主机Apache网络安全访客htaccess爬虫重定向防盗链数据库web.config访问百度云加速cookies前端建站身份认证wordpress网站优化缓存CLB

很长一段时间,我用后台发布文章或更新文章时候都会“等到花都谢了”,甚至出现内部错误,需要再次刷新一下后台的文章选项才能看到:已经发布了。找不到原因呢,很无奈 :-( 。一直觉得自己运气不好,选了个错误的主机商。

 

huaxiele

 

这周看到 露兜博客 有类似的文章,说是百度WordPress结构化数据插件造成的。我按照他说的试了一下,不果不其然!发布文章和更新文章时候“便秘”的情况瞬时消失了,感觉“通”了!

借花献佛,原文引用一下方法:

 

判断是否是该插件造成

用文本编辑器打开该插件目录下的main.php,即 baidusubmit/main.php
查找:publishPost

本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利

 

  1. static function publishPost($postid)
  2. {
  3.     require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . './inc/sitemap.php';
  4.     $schema = BaidusubmitSitemap::genSchemaByPostId($postid$xpost);
  5.     if ('publish' != $xpost->post_status || '' != $xpost->post_password) {
  6.         self::deletePost($postid);z
  7.     return;
  8.     }
  9.     $xml = $schema->toXml();
  10.     $content = BaidusubmitSitemap::genPostXml($xml);
  11.     //file_put_contents('/home/work/baidusubmit.log',  date('[Y-m-d H:i:s]')."\n".$content, FILE_APPEND);
  12.     $r = BaidusubmitSitemap::sendXml($content, 1);
  13.     //file_put_contents('/home/work/baidusubmit.log', date('[Y-m-d H:i:s]')."\n".$r, FILE_APPEND);
  14. }

 

为了测试运行时间,改成如下代码:

本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利

 
  1. static function publishPost($postid)
  2. {
  3.     // 标记程序执行开始时间
  4.     list($usec$sec) = explode(" ",microtime());
  5.     $time_start =  ((float)$usec + (float)$sec);
  6.     require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . './inc/sitemap.php';
  7.     $schema = BaidusubmitSitemap::genSchemaByPostId($postid$xpost);
  8.     if ('publish' != $xpost->post_status || '' != $xpost->post_password) {
  9.         self::deletePost($postid);z
  10.         return;
  11.     }
  12.     $xml = $schema->toXml();
  13.     $content = BaidusubmitSitemap::genPostXml($xml);
  14.     //file_put_contents('/home/work/baidusubmit.log',  date('[Y-m-d H:i:s]')."\n".$content, FILE_APPEND);
  15.     $r = BaidusubmitSitemap::sendXml($content, 1);
  16.     //file_put_contents('/home/work/baidusubmit.log', date('[Y-m-d H:i:s]')."\n".$r, FILE_APPEND);
  17.     // 标记程序执行结束时间
  18.     list($usec$sec) = explode(" ",microtime());
  19.     $time_end =  ((float)$usec + (float)$sec);
  20.     // 计算程序执行总用时
  21.     $time = $time_end - $time_start;
  22.     // 发送邮件,将ludou#ludou.org改成你的邮件地址
  23.     wp_mail('ludou#ludou.org', '程序用时', '总时长(单位:秒):'.$time);
  24. }

 

将代码中的 ludou#ludou.org 改成你的邮箱地址,然后上传到你的网站服务器,并在WordPress后台发布或更新一篇文章,这时你的邮箱中就会收到一封标题为 程序用时 的邮件,邮件内容中就会看到程序运行时长。

 

如果运行时间很长,那就确定肇事者了。测试完毕将代码恢复成最初的原始状态。

 

本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2024. All Rights Reserved

解决方案

修改一下第一段代码 publishPost 函数的运行机制,让实时推送只在第一次发布文章时进行,以后再继续修改文章保存时不推送。如下:

  1. static function publishPost($postid)
  2. {
  3.    // 新增的代码
  4.    if (wp_is_post_revision($postid) ||
  5.        get_post_status($postid) != 'publish' ||
  6.        $_POST['original_post_status'] == 'publish')
  7.       return;
  8.    // 后面的代码不变
  9.    require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . './inc/sitemap.php';

 

本文禁止无授权转载 - 时光在路上 www.timezls.com 保留所有权利

 

以上便是 露兜 的解决方案

后来想想,我的网站后来已经自行添加过百度主动推送程序,跟这个百度自己的结构化插件是不是重复了?查了一下这个插件最后提交文章日期,停留在 3 月份。应该是作废了。干脆把它卸载算了。

卸载之后发布或更新文章不会再持续等待了,问题解决。

很多时候遇到事情,都是急不得,不行就放放。你会发现,某天灵光一闪或者来个邂逅的惊喜,也许这就是生活中乐趣的一部分。

"Life is like a box of chocolates. You never know what you're gonna get."

附上露兜博客的地址:https://www.ludou.org/baidu-submit-take-long-time-to-publish-post.html

本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2024. All Rights Reserved

时光在路上扫码阅读、分享
  • 版权声明:该文章由 时光在路上 发表,共 2785字。除非特别标注来源,否则为原创。详见《版权声明》部分。
  • 转载请注明:文章标题和文章链接 - 时光在路上 - 也可直接“复制本文链接” 或 使用右边二维码分享本文 →