覆盖 Wordpress OpenGraph 元数据 and/or wp_head
Overriding Wordpress OpenGraph meta-data and/or wp_head
我们购买了一个 wordpress 主题 (Zerif Pro),到目前为止我还没有对它印象深刻。我们的团队需要添加相当多的 hackery 来使网站正常运行,因为主题很脆弱,硬编码设置应该是可配置的并且滥用了 Wordpress 的一些功能(理想情况下我们会放弃这个主题并抵制 Themeisle 以用于未来的主题但是我们在这一点上对网站走得太远了。
它误用的地方之一是静态首页。该主题确实构建了一个静态首页,但它是在 "latest posts" 页面之上构建的,而不是像 Wordpress 期望的那样正确地构建它。这意味着当我们在 Wordpress 设置中选择 "Front page displays a static page" 选项时,它会破坏主题。出于这个原因,我们保持主页不变,并创建了一个虚拟页面来包含最新的 posts。
然而,现在的问题是主页尽管是封面,但仍然以某种方式认为它是博客页面,这导致了一些其他问题(例如 "share this post" 链接出现在上面,我们通过 css) 隐藏了不正确的 OpenGraph 信息,这就是这个问题的内容。
填充到封面中的元数据(实际上是最新的 posts 页面被主题错误地样式化到封面中)与我们最新的 post 相匹配。我假设它是由 wp_head()
生成的,但无法找到此元数据的来源(主题似乎没有覆盖 wp_head()
并且我们没有使用任何 SEO 插件正在注入 og
元数据)。目前,我想到的解决方案是:
- 覆盖 wp_head() 以排除此数据(我对这样做的逻辑不够熟悉)
- 让WP平台以某种方式知道主页不是博客post(这将防止从最新博客post中提取不相关的OpenGraph数据,我又不知道该怎么做那)
- 调整主题以将其 "static" 内容注入不同的页面而不是默认的最新 posts 页面,我们可以通过插件控制元数据(同样,不知道在哪里这个逻辑已经完成或者这个主题是否会合作)
- 找到填充 OpenGraph 元数据的位置并覆盖它
有人可以建议如何着手解决问题(如果您有比我上面提到的 4 个更好的解决方案或关于这 4 个中任何一个的任何指导,我将不胜感激)。如果有帮助,这里是所有当前安装的插件:
- 通过电子邮件发送联系表
- 简单的 Twitter 源小部件
- 精选图片来自 URL
- Google WP 的分析仪表板
- 页面中的帖子
- 发送网格
- 简单自定义CSS
- Supsystic 的社交分享按钮
- TC 自定义 JavaScript
- 字体
- Widget Wrangler
- WP 客户端徽标轮播
- WPide
如果没有 Jevuska 的帮助,这个答案是不可能的,他的评论解释了如何获取 wp_head
的内容,这是我以前完全不知道的事情。这些步骤可用于从 wp_head
中删除任何不需要的逻辑,而不仅仅是困扰我的 og
逻辑。以下是我为解决该问题所做的工作:
根据 Jevuska 的建议将以下代码添加到 functions.php:
add_action( 'wp', function () {
global $wp_filter;
if ( isset( $wp_filter['wp_head'] ) ) {
echo '<pre>';
print_r($wp_filter['wp_head']);
echo '</pre>';
}
} );
重新加载页面以查看包含各种 wp_head
项的巨大哈希转储,这些项显示为 key/value 对,键是名称,值是数组更多数据:[wp_oembed_add_discovery_links] => Array
收集了所有的键并按照以下格式将每个条目插入到 functions.php 中:remove_action('wp_head', 'wp_oembed_add_discovery_links')
,我总共有大约 20 个条目,我还从步骤 1 中删除了该函数.
重新加载页面并观察到 og
元数据消失了,<head>
元素中的许多其他内容也消失了。为了快速缩小到有问题的元素,我使用了二进制搜索,删除了一半的元素并查看它是否有影响。在 4 次迭代中,我找到了罪魁祸首:fifu_add_social_tags
在 functions.php 中保留 remove_action('wp_head', 'fifu_add_social_tags');
逻辑以防止呈现 og
标记,删除所有其他行。
我们购买了一个 wordpress 主题 (Zerif Pro),到目前为止我还没有对它印象深刻。我们的团队需要添加相当多的 hackery 来使网站正常运行,因为主题很脆弱,硬编码设置应该是可配置的并且滥用了 Wordpress 的一些功能(理想情况下我们会放弃这个主题并抵制 Themeisle 以用于未来的主题但是我们在这一点上对网站走得太远了。
它误用的地方之一是静态首页。该主题确实构建了一个静态首页,但它是在 "latest posts" 页面之上构建的,而不是像 Wordpress 期望的那样正确地构建它。这意味着当我们在 Wordpress 设置中选择 "Front page displays a static page" 选项时,它会破坏主题。出于这个原因,我们保持主页不变,并创建了一个虚拟页面来包含最新的 posts。
然而,现在的问题是主页尽管是封面,但仍然以某种方式认为它是博客页面,这导致了一些其他问题(例如 "share this post" 链接出现在上面,我们通过 css) 隐藏了不正确的 OpenGraph 信息,这就是这个问题的内容。
填充到封面中的元数据(实际上是最新的 posts 页面被主题错误地样式化到封面中)与我们最新的 post 相匹配。我假设它是由 wp_head()
生成的,但无法找到此元数据的来源(主题似乎没有覆盖 wp_head()
并且我们没有使用任何 SEO 插件正在注入 og
元数据)。目前,我想到的解决方案是:
- 覆盖 wp_head() 以排除此数据(我对这样做的逻辑不够熟悉)
- 让WP平台以某种方式知道主页不是博客post(这将防止从最新博客post中提取不相关的OpenGraph数据,我又不知道该怎么做那)
- 调整主题以将其 "static" 内容注入不同的页面而不是默认的最新 posts 页面,我们可以通过插件控制元数据(同样,不知道在哪里这个逻辑已经完成或者这个主题是否会合作)
- 找到填充 OpenGraph 元数据的位置并覆盖它
有人可以建议如何着手解决问题(如果您有比我上面提到的 4 个更好的解决方案或关于这 4 个中任何一个的任何指导,我将不胜感激)。如果有帮助,这里是所有当前安装的插件:
- 通过电子邮件发送联系表
- 简单的 Twitter 源小部件
- 精选图片来自 URL
- Google WP 的分析仪表板
- 页面中的帖子
- 发送网格
- 简单自定义CSS
- Supsystic 的社交分享按钮
- TC 自定义 JavaScript
- 字体
- Widget Wrangler
- WP 客户端徽标轮播
- WPide
如果没有 Jevuska 的帮助,这个答案是不可能的,他的评论解释了如何获取 wp_head
的内容,这是我以前完全不知道的事情。这些步骤可用于从 wp_head
中删除任何不需要的逻辑,而不仅仅是困扰我的 og
逻辑。以下是我为解决该问题所做的工作:
根据 Jevuska 的建议将以下代码添加到 functions.php:
add_action( 'wp', function () { global $wp_filter; if ( isset( $wp_filter['wp_head'] ) ) { echo '<pre>'; print_r($wp_filter['wp_head']); echo '</pre>'; } } );
重新加载页面以查看包含各种
wp_head
项的巨大哈希转储,这些项显示为 key/value 对,键是名称,值是数组更多数据:[wp_oembed_add_discovery_links] => Array
收集了所有的键并按照以下格式将每个条目插入到 functions.php 中:
remove_action('wp_head', 'wp_oembed_add_discovery_links')
,我总共有大约 20 个条目,我还从步骤 1 中删除了该函数.重新加载页面并观察到
og
元数据消失了,<head>
元素中的许多其他内容也消失了。为了快速缩小到有问题的元素,我使用了二进制搜索,删除了一半的元素并查看它是否有影响。在 4 次迭代中,我找到了罪魁祸首:fifu_add_social_tags
在 functions.php 中保留
remove_action('wp_head', 'fifu_add_social_tags');
逻辑以防止呈现og
标记,删除所有其他行。