Manipulating wp_head content

时间:2014-01-24 作者:tommica

我想知道我是否可以操纵wp\\u head()的输出?

现在我正在使用Yoast SEO plugin 在我的帖子中添加一些社交标签(og:*)。

现在,这个网站是一个旧的基于umbraco的博客的翻版,永久链接结构不同,所以旧的url是301到新的,但addthis需要旧的url保持正确的计数,所以我们有一个自定义字段,在需要时提供“addthis:url”。。。不幸的是,facebook&;推特不使用该url,但他们使用插件提供的页面“og:url”元标记(指向新的url),并且似乎无法在帖子中进行操作。

我的想法是,在打印wp\\u头之前,我基本上会进行搜索和替换,将“og:url”更改为正确的,但我还没有找到一种方法。。。

所以我想问的是,我的想法是否正确以及如何做到这一点,或者是否有更好的/官方的方法来修复此解决方案?

3 个回复
最合适的回答,由SO网友:tommica 整理而成

我设法找到了以下帖子:https://wordpress.stackexchange.com/a/75168/45611

它基本上满足了我的需要。

/*
 * This whole block here changes the og:url that Wordpress Seo Yoast provides
 * It uses the addthis_share_url custom field, and if it is not present, it defaults
 * to the permalink, just like the plugin does.
 */
add_action(\'get_header\', \'blog_template_add_ob_start\');
add_action(\'wp_head\', \'blog_template_add_ob_end_flush\', 100);
function blog_template_add_ob_start() {
    ob_start(\'blog_template_add_filter_wp_head_output\');
}
function blog_template_add_ob_end_flush() {
    ob_end_flush();
}
function blog_template_add_filter_wp_head_output($output) {
    $altUrl = get_post_custom_values(\'addthis_share_url\')[0];
    $url = get_permalink();

    if ($altUrl && is_single()) {
        $output = str_ireplace(\'<meta property="og:url" content="\' . $url . \'" />\', \'<meta     property="og:url" content="\' . esc_attr(esc_url($altUrl)) . \'" />\', $output);
    }
    return $output;
}
谢谢大家,你很有帮助!

SO网友:s_ha_dum

附加到的信息wp_head 行动挂钩是echoed(如果需要echoed)发生时。没有可以搜索和替换的“wp\\u head”内容字符串。

您需要为您感兴趣的数据找到回调函数/方法,并希望有内置的钩子可以帮助您解决问题wp_head:

ob_start();     
wp_head(); 
$head = ob_get_contents();
ob_end_clean();
echo $head;

SO网友:tfrommen

例如,您可以执行以下操作之一:

  1. Hook 进入wp_head 并输出您自己的元信息。这可以定义为post meta.

// Edit

我只是粗略地看了一下插件。

如果你想的话alter 这个og:url, 您可以这样做:

if (is_single()) {
    remove_action(\'wpseo_opengraph\', array(\'WPSEO_OpenGraph\', \'url\'), 12);
    add_action(\'wpseo_opengraph\', \'wpse_131062_my_og_url\', 12);
}

function wpse_131062_my_og_url() {
    // this post meta has to be set up and filled by you!
    if ($url = get_post_meta(\'my_og_url\')) {
        ?>
        <meta property="og:url" content="<?php echo esc_attr(esc_url($url)); ?>" />
        <?php
    }
}
此代码为untested, 虽然

结束

相关推荐