Facebook获取wordpress制作网站og标签报错,如何调试?

问题描述

使用Wordpress开发的项目,在主题funcions.php文件添加了增加og标签的代码(文章底部提供添加og标签代码),但使用Facebook分享网站文章时才无法获取,报以下错误。

Facebook获取wordpress制作网站og标签报错

解决方法

遇到该问题,最大的难点就是无法看到错误详细信息,无从下手解决。幸好Facebook提供了FACEBOOK for Developers,这里边有分享调试器(网址:https://developers.facebook.com/tools/debug/),通过这个工具可排查问题原因。

在Facebook分享调试器页面输入网址调试,看到以下结果:

Facebook分享调试器检测结果

这时可以点击Facebook分享调试器结果底部的【查看抓取工具看到的实际网址】,可以进一步看到抓取的源代码,进而判断具体原因。

我的问题是由于自己加入的防采集代码,正好将facebook分享抓取判断为非法采集,导致抛出Wordpress error,就正好是我们前边看到的错误信息。修改或删除防采集代码后问题解决。

扩展一 WordPress使用主题functions.php添加og meta标签代码

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;
}

拓展二 WordPress使用主题functions.php添加防采集代码

//禁止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);
}

转载请注明:半亩方塘 » Facebook获取wordpress制作网站og标签报错,如何调试?