覆盖 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 元数据)。目前,我想到的解决方案是:

有人可以建议如何着手解决问题(如果您有比我上面提到的 4 个更好的解决方案或关于这 4 个中任何一个的任何指导,我将不胜感激)。如果有帮助,这里是所有当前安装的插件:

如果没有 Jevuska 的帮助,这个答案是不可能的,他的评论解释了如何获取 wp_head 的内容,这是我以前完全不知道的事情。这些步骤可用于从 wp_head 中删除任何不需要的逻辑,而不仅仅是困扰我的 og 逻辑。以下是我为解决该问题所做的工作:

  1. 根据 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>';
        }
    } );
    
  2. 重新加载页面以查看包含各种 wp_head 项的巨大哈希转储,这些项显示为 key/value 对,键是名称,值是数组更多数据:[wp_oembed_add_discovery_links] => Array

  3. 收集了所有的键并按照以下格式将每个条目插入到 functions.php 中:remove_action('wp_head', 'wp_oembed_add_discovery_links'),我总共有大约 20 个条目,我还从步骤 1 中删除了该函数.

  4. 重新加载页面并观察到 ​​og 元数据消失了,<head> 元素中的许多其他内容也消失了。为了快速缩小到有问题的元素,我使用了二进制搜索,删除了一半的元素并查看它是否有影响。在 4 次迭代中,我找到了罪魁祸首:fifu_add_social_tags

  5. 在 functions.php 中保留 remove_action('wp_head', 'fifu_add_social_tags'); 逻辑以防止呈现 og 标记,删除所有其他行。