Wp_head()の出力を操作することが可能かどうか知りたいのですが。
今私は Yoast SEOプラグイン を使って私の投稿にソーシャルタグをいくつか追加しています(og:*)。
このサイトは古いumbracoベースのブログをリメイクしたもので、パーマリンクの構造が異なるため、古いURLは301から新しいURLに変更されますが、addthisでは正しいURLを保持するために古いURLが必要です。必要に応じて "addthis:url"を提供します...残念ながらfacebookとTwitterはそのURLを使用しませんが、彼らは(新しいURLを指す)プラグインが提供するページ "og:url"メタタグを使用します。投稿内で操作することはできません。
私の考えは、wp_headがプリントアウトされる前に、私は基本的にその "og:url"を修正するために検索と置換をするでしょう、しかし私はそれをする方法を見つけませんでした...
だから私が求めているのは、それが私の考えが正しいこと、そしてそれをどうやってやるのか、それともこの解決法を修正するより良い/公式な方法があるのか?
私はこの記事を見つけることができた: 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;
}
ありがとうございました。
wp_head
アクションフックに添付された情報は、発生時にecho
edです(echo
edである必要がある場合)。検索して置き換えることができる "wp_head"コンテンツ文字列はありません。
あるいはwp_head
周辺の出力バッファリングを試してください。
ob_start();
wp_head();
$head = ob_get_contents();
ob_end_clean();
echo $head;
たとえば、次のいずれかを実行できます。
wp_head
に接続して、独自のメタ情報を出力します。これは post meta として定義できます。//編集
プラグインをちょっと見ただけです。
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です。