Yoast 的 WP SEO - 如何为每个类别设置不同的 og:image

WP SEO by Yoast - How to set different og:image per category

我想为 Wordpress 中的特定 post 设置单独的 facebook open graph 元图像 (og:image)。

例如,如果post属于类别1,则将og:image设为cat_1_image.jpg,如果post属于类别1,则设为cat_2_image.jpg id = 2 的类别。

伪代码:

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 但这似乎没有引导正确的方向。

任何人都可以向我解释如何为不同的 post 类别实现不同的 og:images 吗?!

我破解的原因:WP SEO 不会使用图库简码获取插入 post 的图像。它将回退以包括默认图像(在 WP SEO 选项下指定)作为 og:image。因此,我想禁用包含特定类别(即类别 'has_images')的 post 的默认图像,并让 facebook 抓取器获取图库图像 - 如果没有默认,它们确实会被拾取og:image 出现了!

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

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

在这个例子中,我猜你的图片在你的主题图片文件夹中。

请注意,仅当您的 Wordpress theme/functions 为帖子设置了 _thumbnail_id 元值时,Rich 提供的已接受答案才有效。在我的例子中,它没有(由于各种定制),所以我不得不通过向 get_post_metadata 添加过滤器和 returning 正确的自定义 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() 是我自己的函数,return 是我要附加的缩略图的 ID。我没有找到简单的方法 return 缩略图的路径而不是 ID。