post_class()のhentryクラスを投稿ページ以外で出力しないようにするカスタマイズ

hentryは構造化データを定義するためのCSSクラスです。WordPressではpost_class()といって、ページに応じたclass名を自動生成してくれる便利な機能があります。

が、この中で自動生成されるhentryというclassがやっかいで、post_class()を設定した箇所全てに挿入されることになってしまいます。

投稿ページであればまだしも、アーカイブページや固定ページなどでも挿入されてしまうのがとてつもなく厄介です。

何が厄介かというと、hentryを定義した要素の中には、投稿日投稿者を特定のコードで指定してあげなければならず、普通のブログ記事では、投稿日・投稿者を指定するのは問題ないのですが、固定ページや記事一覧ページでは、デザイン上表示させたくない場合があります。

そんな時でもpost_class()を指定した箇所にはhentryが挿入されてしまうので、サーチコンソールなどで構造化テータの箇所を確認した際に、hentryエラーが発生してしまうのです。

全ページでhentryに対応させるというのが最良の手段のような気がするのですが、固定ページなどでは、投稿者や投稿日を表示させるのはいかがなものかとも思います。

だって、固定ページにも投稿者や投稿日が表示されるのなら、「投稿」と「固定ページ」を分ける意味がわからなくなってしまう気がするのです。

もちろんWordPressテーマの中には、固定ページでも投稿日や投稿者を表示しているテーマは多くあるのですが、個人的には固定ページは、日付などに左右されないプレーンな状態の方が好ましいと思うのです。

というわけで前置きが長くなってしまいましたが、今回は投稿ページ以外でhentryクラスを挿入させない方法を記載したいと思います。

投稿ページ以外でhentryクラスを除外するコード

投稿ページ(ブログ記事)以外でhentryクラスを除外するには、下記のコードをfunctions.phpに記載します。

// 投稿ページ以外でhentryクラスを除去
function remove_hentry( $classes ) {
    if (!is_single()) $classes = array_diff($classes, array('hentry'));
    return $classes;
}
add_filter('post_class', 'remove_hentry');

上記コードにより、post_class()を指定した箇所であっても、投稿ページにしかhentryを出力しなくなります。

なお、使用しているテーマによっては、hentryクラスを出力しなくすることで、CSSに不具合が生じ、サイトが崩れてしまう可能性も考えられます。

その場合は、テーマのstyle.cssなどデザインをつかさどっているCSSファイルを開き、ファイル内を「.hentry」でテキスト検索。もしも「.hentry」というのが出てきたら、その箇所を別のセレクタに置き換える必要があるかと思います。

テーマによっては上記のような施策が必要になる場合があるので、ご注意ください。