通过函数判断文章更新操作,或者通过获取自定义字段内容判断是否已推送,避免在更新文章时重复推送。这是因为百度收录之前,如果频繁向百度推送更新通知,文章很可能就会被百度丢入沙盒,短时间内不会在百度搜索展现该条收录!因此,网站在发布文章之后,稳定收录并展示之前,切忌频繁修改内容!
个人大胆猜测,造成这种现象的根本原因是收录之前,如果频繁更新内容,百度会认为这个内容是不稳定的。这个机制估计是百度出于用户体验考虑,百度希望用户看到的内容是和搜索到的一样,而不是百度收录了 A 内容,就因为你中途改成了 B 内容,导致用户通过 A 关键字搜索,却没有得到预期的结果!
方法①、当网站未禁用修订功能时,可通过修订判断来终止插件推送:
WordPress 的修订功能默认是打开的,那么我们就可以用下面这个语句来判断是否是更新动作。
if (wp_is_post_revision($postid)) return; //更新文章不往下执行,直接返回
修改方法:
编辑 baidusubmit 插件下的 main.php,找到 static function publishPost($postid) { ,在之后添加以上代码即可:
static function publishPost($postid) { if (wp_is_post_revision($postid)) return; //更新文章时不推送 require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . './inc/sitemap.php'; add_post_meta($postid, 'Baidusubmit', 1, true); $schema = BaidusubmitSitemap::genSchemaByPostId($postid, $xpost); if ('publish' != $xpost->post_status || '' != $xpost->post_password) { self::deletePost($postid); return; } /* 以下代码略 */
Ps:可能你会疑问,如何判断已修改成功,更新时插件是否依然在推送数据?有个很简单的判断办法:更新文章时,如果有推送数据,那么花费的时间将比不推送数据要长的多!差距非常明显!
当然,如果你无法确定是否生效,建议使用下面这种方法,绝对可靠!
方法②、当网站禁用了修订功能时,可通过自定义栏目来终止插件推送:
我在测试上面的代码时,发现根本不生效!看了半天,才发现我的博客曾经把修订功能给禁用了!查看修订功能是否被禁用,只要打开网站根目录下的 wp-config.php,查看是否存在一下代码:
/** 禁用自动修订版本 **/ define('WP_POST_REVISIONS', false); define('AUTOSAVE_INTERVAL', 36000);
禁用修订功能是为了节省数据库主键,最大程度保证文章 ID 的连续性,估计这样设置过的博客也不在少数。
既然禁用了修订功能,那第①个方法就无法使用了!这时候,我们可以借助 WordPress 的自定义栏目功能来解决这个问题。
原理很简单:文章首次发布时,会向百度推送数据,并且在对应文章中新增一个自定义栏目:Baidusubmit=1
更新文章的时候,插件先判断自定义栏目,如果 Baidusubmit=1,则不再推送,从而解决了重复推送问题。
修改方法:
还是编辑 baidusubmit 插件下的 main.php,找到 static function publishPost($postid) {,在之后添加代码:
//如果检测到 Baidusubmit=1,则返回 if(get_post_meta($postid,'Baidusubmit',true) == 1) return; //若推送到百度,则新增自定义栏目 add_post_meta($postid, 'Baidusubmit', 1, true);