代码之家  ›  专栏  ›  技术社区  ›  Mario83

使用截图作为og:与LinkedIn共享时图像缓存过快

  •  0
  • Mario83  · 技术社区  · 8 年前

    在我的功能中。php文件,我禁用了og:插件生成的图像输出

    add_filter('wpseo_opengraph_image' , '__return_false' );
    

    并添加了另一个功能,从页面生成截图,并将其用作og:image

    add_action( 'wp_head', 'add_screenshot_as_ogimage' );
    
    function add_screenshot_as_ogimage(){
    
    echo '<meta property="og:image" content="https://s.wordpress.com/mshots/v1/'.urlencode( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] ).'?w=1200"/>';  
    }
    

    问题是,当页面加载时,屏幕截图会生成,但不会立即生成。生成屏幕截图通常需要30秒左右。在这30秒内,只有黑色图像可见,文本为“生成预览”。

    不幸的是,这是LinkedIn为分享而获取的图像。

    因此,我尝试向prime WP添加可选代码。com缓存

    add_action( 'wp_footer', 'add_screenshot_as_ogimage_footer' );
    
    function add_screenshot_as_ogimage_footer(){
    //prime WP.com cache to get the image and not a loading screen
    echo '<img src="https://s.wordpress.com/mshots/v1/'.urlencode( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] ).'?w=1200" width="1" height="1" style="visibility: hidden;">';
    }
    

    但还是没有运气。我还尝试添加一个php sleep() 函数,但整个页面不会在函数中设置的时间内加载。

    此外,奇怪的是,谷歌+和脸书能够抓取生成的预览作为og:图像刚刚好。只有LinkedIn给我带来了这些麻烦。

    是否有任何解决方法,可以在LinkedIn(或所有爬虫)访问页面之前设置延迟?我意识到LinkedIn每隔几天就会清空缓存,但这不符合我的需要。

    0 回复  |  直到 8 年前