web-dev-qa-db-ja.com

Wp_headコンテンツを操作する

Wp_head()の出力を操作することが可能かどうか知りたいのですが。

今私は Yoast SEOプラグイン を使って私の投稿にソーシャルタグをいくつか追加しています(og:*)。

このサイトは古いumbracoベースのブログをリメイクしたもので、パーマリンクの構造が異なるため、古いURLは301から新しいURLに変更されますが、addthisでは正しいURLを保持するために古いURLが必要です。必要に応じて "addthis:url"を提供します...残念ながらfacebookとTwitterはそのURLを使用しませんが、彼らは(新しいURLを指す)プラグインが提供するページ "og:url"メタタグを使用します。投稿内で操作することはできません。

私の考えは、wp_headがプリントアウトされる前に、私は基本的にその "og:url"を修正するために検索と置換をするでしょう、しかし私はそれをする方法を見つけませんでした...

だから私が求めているのは、それが私の考えが正しいこと、そしてそれをどうやってやるのか、それともこの解決法を修正するより良い/公式な方法があるのか​​?

1
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;
}

ありがとうございました。

1
tommica

wp_headアクションフックに添付された情報は、発生時にechoedです(echoedである必要がある場合)。検索して置き換えることができる "wp_head"コンテンツ文字列はありません。

  1. あなたがあなたが操作したいデータのためのコールバック関数/メソッドを見つける必要があるでしょう。
  2. またはそれらのコールバックを削除し、それらを置き換えるためにあなた自身のものを追加してください
  3. あるいはwp_head周辺の出力バッファリングを試してください。

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

たとえば、次のいずれかを実行できます。

  1. フックwp_head に接続して、独自のメタ情報を出力します。これは post meta として定義できます。
  2. もしあればプラグインのフィルタ/アクションにフックし、それがプリントアウトされる前にメタを変更します。

//編集

プラグインをちょっと見ただけです。

alterog: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です。

1
tfrommen