使用Wordpress开发的项目,在主题funcions.php文件添加了增加og标签的代码(文章底部提供添加og标签代码),但使用Facebook分享网站文章时才无法获取,报以下错误。
遇到该问题,最大的难点就是无法看到错误详细信息,无从下手解决。幸好Facebook提供了FACEBOOK for Developers,这里边有分享调试器(网址:https://developers.facebook.com/tools/debug/),通过这个工具可排查问题原因。
在Facebook分享调试器页面输入网址调试,看到以下结果:
这时可以点击Facebook分享调试器结果底部的【查看抓取工具看到的实际网址】,可以进一步看到抓取的源代码,进而判断具体原因。
我的问题是由于自己加入的防采集代码,正好将facebook分享抓取判断为非法采集,导致抛出Wordpress error,就正好是我们前边看到的错误信息。修改或删除防采集代码后问题解决。
add_action('wp_head', 'abel_add_head_meta_og', 1, 1);
if(!function_exists('abel_add_head_meta_og')){
function abel_add_head(){
if(is_single() || is_page()){
echo '<meta >
<meta >
<meta >
<meta >
<meta >';
}
}
}
function abel_get_post_thumbnail($post_ID){
if(isset($attachment_id) && $attachment_id) return $attachment_id;
if (has_post_thumbnail()) {
$timthumb_src = wp_get_attachment_image_src( get_post_thumbnail_id($post_ID), 'full' );
$url = $timthumb_src[0];
} else {
if(!isset($post_content)){
$post = get_post($post_ID);
$post_content = $post->post_content;
}
preg_match_all('|<img.*?src=[\'"](.*?)[\'"].*?>|i', do_shortcode($post_content), $matches);
if( $matches && isset($matches[1]) && isset($matches[1][0]) ){
$url = $matches[1][0];
}else{
$url = '';
}
}
return $url;
}
//禁止UA为空或含有PHP的请求
function deny_mirrored_request(){
$ua = $_SERVER['HTTP_USER_AGENT'];
if(!$ua || preg_match('/PHP/i', $ua)){
header("Content-type: text/html; charset=utf-8");
wp_die('请勿采集本站!');
}
}
if(!is_admin()) {
add_action('init', 'deny_mirrored_request', 10);
}