Set og:在带有外部图像的自定义单一帖子中以编程方式设置图像

时间:2019-01-13 作者:GeeC

我创建了一个带有自定义帖子类型的插件,单个帖子模板可以从外部站点获取照片。我想通过编程将其中一个图像的源设置为页面标题中的og:image元数据。目前,它默认为站点默认图像。

图像库是使用单个post模板中的ajax调用检索的。我想根据返回的第一个图像设置meta标记值。

单个post模板调用get\\u header(),因此在返回库之前已经构建了头。因此,我需要一种方法来替换或覆盖标题中的一个条目。标题中的所有其他内容都是我想要的,但都是基于创建/编辑帖子时的静态数据集。

我甚至不确定我正在努力实现的目标是否可能,但如果有人有任何有用的想法,我将不胜感激。

1 个回复
SO网友:tmdesigned

你最终会得到你所说的,但不会work 可靠。

换句话说,您可以用您的一幅图像替换标题中的标记。但到那时,大多数刮刀(社交媒体刮刀,以及任何对og:tags感兴趣的东西)都已经来了又走了。

因此,您必须在写入这些标记之前替换它。好消息是你可以!您只需要使用PHP而不是AJAX。坏消息是它可能很快变得复杂。

因此,在WordPress编写本节之前,您需要已经用PHP获取了第一个图像URL,并告诉WordPress您想在那里添加一些东西——您的og:meta标记。使用AJAX加载的内容(按参数过滤的图像URL列表?)您将使用PHP进行复制—只需获取第一个图像URL所需的任何内容即可。然后将其写入标题。

例如,假设远程源返回图像的JSON数组可能如下所示:

function so325454_add_meta_tag(){

    $images = file_get_contents(\'...\');
    if ( !$images ){ return; } //in case file fails

    $list_of_images = @json_decode( $images );
    if ( is_null( $list_of_images ) 
    || !is_array( $list_of_images ) 
    || count( $list_of_images ) < 1 ){ return; } //no content or bad JSON or empty array

    $image = $list_of_images[0]; 
    echo "<meta property=\'og:image\' content=\'$image\' />";
}
add_action( \'wp_head\', \'so325454_add_meta_tag\' );
遗憾的是,你可能不得不小心其他写og标签的插件,即使是相同的og标签。换句话说,写你的标签并不能阻止其他人。

相关推荐

Repeated headers in wp_mail

由于标记原因,我多次将自定义标头传递给wp_mail(), 但实际上只有头的最后一个实例被发送。看来wp_mail() 正在筛选自定义标头,以便只发送唯一的标头。我相信这是因为wp_mail 函数定义(wp includes/pluggable.php,第173行)自定义头通过添加到关联数组(第303行)进行处理: $headers[trim( $name )] = trim( $content ); 有没有一种方法可以在不修改wp_mail 功能本身?WP Codex for wp_mai