覆盖Wordpress OpenGraph元数据和/或wp_head

时间:2016-03-28 19:49:15

标签: php wordpress opengraph

我们已经购买了一个wordpress主题(Zerif Pro),到目前为止我并没有对它印象深刻。我们的团队需要添加相当多的hackery来使网站正常运行,因为主题是脆弱的,硬编码设置应该是可配置的并且滥用Wordpress的一些功能(理想情况下我们会抛出这个主题并抵制未来主题的Themeisle但是我们现在已经对网站走得太远了。)

它滥用的一个问题是静态首页。这个主题确实构建了一个静态的首页,但是在“最新帖子”页面之上这样做,而不是像Wordpress所期望的那样正确地进行。这意味着当我们在Wordpress设置中选择“首页显示静态页面”选项时,它会破坏主题。出于这个原因,我们保持主页不变,并创建了一个虚拟页面,以包含最新的帖子。

然而现在的问题是,主页虽然是封面,但仍然以某种方式认为它是一个博客页面,这导致了一些其他问题(如“分享此帖子”链接出现在其上,我们' (通过css隐藏)以及最近不正确的OpenGraph信息,这就是这个问题的关键。

填充到封面页面中的元数据(实际上是由主题错误地设置为封面页面的最新帖子页面)与我们最新帖子的元数据相匹配。我假设它是由wp_head()生成的,但找不到这个元数据的来源(主题似乎没有覆盖wp_head()而我们没有使用任何SEO插件注入og元数据)。在这一点上,这是我正在考虑的解决方案:

  • 覆盖wp_head()以排除此数据(我对逻辑不够熟悉)
  • 让WP平台以某种方式知道主页不是博客文章(这样可以防止从最新博客文章中删除不相关的OpenGraph数据,再次我不知道该怎么做)
  • 调整主题,将其“静态”内容注入不同的页面,而不是默认的最新帖子页面,我们可以通过插件控制元数据(再次,不知道这个逻辑在哪里或者这个主题是否会甚至合作)
  • 查找填充OpenGraph元数据的位置并覆盖它

有人可以建议如何解决问题(如果你有一个比我上面提到的4更好的解决方案或任何一个4的指导,我会很感激)。如果它有帮助,这里是所有当前安装的插件:

  • 联系表格发送电子邮件
  • Easy Twitter Feed Widget
  • 来自网址的精选图片
  • 适用于WP的Google Analytics信息中心
  • 页面中的帖子
  • SendGrid
  • 简单自定义CSS
  • Supsystic的社交分享按钮
  • TC Custom JavaScript
  • 典型案例
  • Widget Wrangler
  • WP Client Logo Carousel
  • WPide

1 个答案:

答案 0 :(得分:1)

如果没有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项的哈希的巨大转储,这些项显示为键/值对,其中键是名称,值是包含更多数据的数组:{{ 1}}

  3. 收集所有密钥并按照以下格式将每个条目插入到functions.php中:[wp_oembed_add_discovery_links] => Array,我总共有大约20个条目,我还从步骤1中删除了该函数。

    < / LI>
  4. 重新加载页面并观察到remove_action('wp_head', 'wp_oembed_add_discovery_links')元数据已消失,og元素中的许多其他内容也消失了。为了快速缩小到违规元素,我使用了二分搜索,删除了一半的元素并查看它是否有效果。在4次迭代中,我找到了罪魁祸首:<head>

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