很长一段时间,我用后台发布文章或更新文章时候都会“等到花都谢了”,甚至出现内部错误,需要再次刷新一下后台的文章选项才能看到:已经发布了。找不到原因呢,很无奈 。一直觉得自己运气不好,选了个错误的主机商。
这周看到 露兜博客 有类似的文章,说是百度WordPress结构化数据插件造成的。我按照他说的试了一下,不果不其然!发布文章和更新文章时候“便秘”的情况瞬时消失了,感觉“通”了!
借花献佛,原文引用一下方法:
判断是否是该插件造成
用文本编辑器打开该插件目录下的main.php,即 baidusubmit/main.php
查找:publishPost
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利
- static function publishPost($postid)
- {
- require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . './inc/sitemap.php';
- $schema = BaidusubmitSitemap::genSchemaByPostId($postid, $xpost);
- if ('publish' != $xpost->post_status || '' != $xpost->post_password) {
- self::deletePost($postid);z
- return;
- }
- $xml = $schema->toXml();
- $content = BaidusubmitSitemap::genPostXml($xml);
- //file_put_contents('/home/work/baidusubmit.log', date('[Y-m-d H:i:s]')."\n".$content, FILE_APPEND);
- $r = BaidusubmitSitemap::sendXml($content, 1);
- //file_put_contents('/home/work/baidusubmit.log', date('[Y-m-d H:i:s]')."\n".$r, FILE_APPEND);
- }
为了测试运行时间,改成如下代码:
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利
- static function publishPost($postid)
- {
- // 标记程序执行开始时间
- list($usec, $sec) = explode(" ",microtime());
- $time_start = ((float)$usec + (float)$sec);
- require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . './inc/sitemap.php';
- $schema = BaidusubmitSitemap::genSchemaByPostId($postid, $xpost);
- if ('publish' != $xpost->post_status || '' != $xpost->post_password) {
- self::deletePost($postid);z
- return;
- }
- $xml = $schema->toXml();
- $content = BaidusubmitSitemap::genPostXml($xml);
- //file_put_contents('/home/work/baidusubmit.log', date('[Y-m-d H:i:s]')."\n".$content, FILE_APPEND);
- $r = BaidusubmitSitemap::sendXml($content, 1);
- //file_put_contents('/home/work/baidusubmit.log', date('[Y-m-d H:i:s]')."\n".$r, FILE_APPEND);
- // 标记程序执行结束时间
- list($usec, $sec) = explode(" ",microtime());
- $time_end = ((float)$usec + (float)$sec);
- // 计算程序执行总用时
- $time = $time_end - $time_start;
- // 发送邮件,将ludou#ludou.org改成你的邮件地址
- wp_mail('ludou#ludou.org', '程序用时', '总时长(单位:秒):'.$time);
- }
将代码中的 ludou#ludou.org 改成你的邮箱地址,然后上传到你的网站服务器,并在WordPress后台发布或更新一篇文章,这时你的邮箱中就会收到一封标题为 程序用时 的邮件,邮件内容中就会看到程序运行时长。
如果运行时间很长,那就确定肇事者了。测试完毕将代码恢复成最初的原始状态。
本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2024. All Rights Reserved
解决方案
修改一下第一段代码 publishPost 函数的运行机制,让实时推送只在第一次发布文章时进行,以后再继续修改文章保存时不推送。如下:
- static function publishPost($postid)
- {
- // 新增的代码
- if (wp_is_post_revision($postid) ||
- get_post_status($postid) != 'publish' ||
- $_POST['original_post_status'] == 'publish')
- return;
- // 后面的代码不变
- 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