Yo SEO的WP SEO - 如何设置不同的og:每个类别的图像

时间:2015-02-03 09:07:01

标签: php wordpress image facebook-graph-api seo

我想为Wordpress中的特定帖子设置单独的facebook开放图元图像(og:image)。

例如,如果帖子属于类别1,请将og:image设置为cat_1_image.jpg,如果帖子属于id = 2的类别,请将其设置为cat_2_image.jpg

伪码:

if($category->term_id == 1)
    og:image = 'cat_1_image.jpg';
elseif($category->term_id == 2)
    og:image = 'cat_2_image.jpg';
elseif($category->term_id == 3) // CatID 3 means 'Post has images, no default og:image, please'
    og:image = '';

现在,我已经查看了wpseo的各种钩子,例如wpseo_pre_analysis_post_contentwpseo_opengraph_image,但这似乎并没有朝正确的方向发展。

有人可以向我解释如何实现不同的og:不同帖子类别的图片吗?!

我的黑客的原因:WP SEO不会使用图库短代码来获取插入帖子的图像。它将回退为包含默认图像(在WP SEO选项下指定)作为og:image。因此,我想禁用某个类别的帖子的默认图像(即类别' has_images'),并让facebook刮刀拿起图库图像 - 如果没有默认值,它们会被拾取:图像存在!

2 个答案:

答案 0 :(得分:5)

您可以尝试这样的事情(未经测试)。它使用wpseo_opengraph_image Yoast过滤器作为opengraph图像。

add_filter('wpseo_opengraph_image', 'category_image');
function category_image($image) {
   global $post;
   if( in_category( 'category1', $post->ID ) ) {
       $image = get_stylesheet_directory_uri().'/images/cat_1_image.jpg';
   } elseif(in_category( 'category2', $post->ID )) {
       $image = get_stylesheet_directory_uri().'/images/cat_2_image.jpg';
   }
   return $image;
}

在此示例中,我猜测您的图片位于主题图片文件夹中。

答案 1 :(得分:3)

请注意,Rich提供的接受答案仅适用于您的Wordpress主题/函数为帖子设置_thumbnail_id元值的情况。在我的情况下,它没有(由于各种自定义),所以我不得不通过向get_post_metadata添加过滤器并在获取元数据时返回正确的自定义thumbnail_id来伪造该部分:

add_filter('get_post_metadata', 'so28295023', 10, 4);
function so28295023($ignore, $object_id, $meta_key, $single ) {
    if($single && $meta_key == '_thumbnail_id') {
        return get_custom_thumbnail_id();
    }
}

当然,get_custom_thumbnail_id()是我自己的函数,它返回我想要附加的缩略图的ID。我没有找到一种方法来简单地返回缩略图的路径而不是ID。