【構造化データのマークアップをする時に使った】WordPressのpost_class()で自動的に付与されるclass「hentry」を削除する方法

WordPressで「Schema.orgの構造化データをマークアップ」する機会がありまして、下のコードはFoundationPressのテーマファイル「single.php」内にマークアップを行った例を部分的に抜き出したものです。

構造化データのマークアップ(1部)

<article itemscope itemtype="http://schema.org/Article" id="post-<?php the_ID(); ?>" <?php post_class('clearfix'); ?>>

で、うまくマークアップされたかな?と思って「構造化データ テストツール」を使うと・・・以下のようなエラーメッセージが出ました。

エラー出ちゃった

エラー: Missing required field "updated".
エラー: Missing required hCard "author".

こちらの記事「Remove WordPress hentry Class from Pages」を参考にしたんですが、どうやらWordPressのpost_class()で自動で付与されるclass名「hentry」があると、上記のようなエラーメッセージが表示されてしまうらしいです。

ほんとはこちらの記事「hatom-feed hatom-entry Error – WordPress Solution」にあるように、更新日と著者情報をエラーが出ているページ内に追記して、マークアップする方法がいいんだろうけど、意図的に表示しない場合だってある。

というわけで、post_class()を使っても「hentry」を出力させない(hentryを削除するって意味)という方法にしました。幸いにも参考記事「Remove WordPress hentry Class from Pages」にコードもあわせて掲載されていましたので、使わせていただきました。(ほとんどそのまんまですが・・・)

以下のコードを使用中のテーマフォルダ内にある「functions.php」に追記します。

PHPコード

function themeslug_remove_hentry( $classes ) {
 $classes = array_diff( $classes, array( 'hentry' ) );
 return $classes;
}
add_filter( 'post_class','themeslug_remove_hentry' );

せっかくの機会なんで、上のコードは何をしているかをざっと理解する

array_diff」を使って配列が格納されている「$classes」と「array(‘hentry’)」との差分を出して、値を返しているって感じです。フィルターフック「post_class」使用。なるほど~、そういうやりかたあるんだなぁ・・・勉強になりました。

他にももっといい方法があるかもしれませんが、今のところこれでOK.というわけで、何かのご参考となりましたら幸いです。

著者:bouya Imamura