Menu


Cocoon 2.7.0 で追加された ogp_card_description フィルターフックで OGP まわりのカスタマイズコードがスッキリに

2024年02月07日

2024年2月6日 WordPress テーマ Cocoon が バージョン 2.7.0 にアップデートされました。

Cocoon 2.7.0 の中でも、私が気になったのは ogp_card_description フィルターフックの追加。

Cocoon のテーマファイル cocoon-master/tmp/header-ogp.php を確認してみると、以下のソースが追加されていることを確認しました。

$description = apply_filters('ogp_card_description', $description);

ogp_card_description フィルターフック導入前の Cocoon のソースコードでは、カスタム投稿タイプのアーカイブページの og:description には get_bloginfo(‘description’) で取得したブログ説明文が代入されるようになっていました。

そのため、Cocoon 2.7.0 以前のカスタム投稿タイプのアーカイブページでは、option_blogdescription をフックするか、tmp/header-ogp.php と tmp/header-twitter-card.php を子テーマで上書きするか、いずれかの方法で og:description を変更していました。

tmp/header-ogp.php と tmp/header-twitter-card.php を上書きする方法は編集が楽なのですが、今回のように Cocoon のテーマファイル(親テーマ)が更新されると、それに合わせて修正しなければならないため、出来ればこの方法は避けたいと考えていました。

そのような考えもあり、option_blogdescription をフックする方法を選びますが、その場合、変数 $default_description を用意し、option_blogdescription をフックして $default_description にブログの説明文を一旦代入 & カスタム投稿タイプのアーカイブページで説明文を上書き、ヘッダー付近で出力されるブログ説明文を元に戻す必要があるため cocoon_part_before__tmp/body-top あたりのテンプレートをフックしてブログ説明文を $default_description で元に戻す、というようなソースを書いていました(他にも実現方法はあったかもしれませんが)。

以下、以後は不要だと思いますが、参考に私が書いていたソースコードを記載します。

global $default_description;

if ( ! function_exists('my_option_blogdescription') ) {
	function my_option_blogdescription( $value, $option ) {
		global $default_description;
		$default_description = $value;
		if ( is_post_type_archive('plan') ) {
			$value = ‘カスタム投稿タイプ plan の説明文を上書き’;
		}
		return $value;
	}
	add_filter('option_blogdescription', 'my_option_blogdescription', 10, 2 );
}

if ( ! function_exists('set_default_option_blogdescription') ) {
	function set_default_option_blogdescription( $value ) {
		if ( is_post_type_archive('plan') ) {
			global $default_description;
			$value = $default_description;
		}
		return $value;
	}
}

if ( !function_exists('cocoon_part_before_tmp_body_top') ) {
	function cocoon_part_before_tmp_body_top() {
		add_filter('option_blogdescription', 'set_default_option_blogdescription' );
	}
	add_action( 'cocoon_part_before__tmp/body-top', 'cocoon_part_before_tmp_body_top' );
}

今回の例はカスタム投稿タイプ plan のアーカイブページ(カスタム投稿タイプのトップページ)のog:description を変更するべく、こういうややこしいソースコードを私は書いていたのですが、v2.7.0 にて追加された ogp_card_description フィルターフックを活用することで、以下のようなすっきりしたコードに変更することができました。

if ( !function_exists('my_ogp_card_description') ) {
	function my_ogp_card_description($description) {
		if ( is_post_type_archive('plan') ) {
			$description = 'カスタム投稿タイプ plan の説明文を上書き';
		}
		return $description;
	}
	add_filter( 'ogp_card_description', 'my_ogp_card_description' );
}

上記では ogp_card_description フィルターフックについて触れましたが、Cocoon 2.7.0 では og:image を上書きする ogp_card_ogp_image フィルターフックも追加されています。

既存の ogp_card_title フィルターフック(または sns_card_title フィルターフック)も合わせて活用することで、Cocoon の OGP まわりのカスタマイズも行いやすくなっている印象を受けます。

Cocoon 2.7.0 で追加された ogp_card_description フィルターフックで私も非常に救われました。アップデートに感謝。

今回、私は少しマニアックなフィルターフックについて触れましたが、Cocoon 2.7.0 では多数のアップデートと不具合修正が入っています。

また、AMP機能・PWA機能・HTML縮小化機能については廃止されているようです。これらの機能を使っていた人は設定の見直しなど行った方がいいかもしれません。

アップデート内容については、中でも ads.txt が編集できる機能は便利そうだと思いましたが、Cocoon 2.7.0 のアップデート・不具合修正・廃止される機能について詳しくは Cocoon 公式サイトにてご確認ください。

参考情報
Cocoon 2.7.0公開。ads.txt編集・リファラー設定機能の追加。AMP・PWA・HTML縮小化機能の廃止  |  Cocoon

広告