【Blogger】ブログ投稿者コメントの本人判定条件について
JetThemeではブログ記事投稿者(筆者)本人のコメントにチェックマークが付きます。本人コメントがわかりやすくなる便利な機能ですが、実装されている判定方法の仕様により本人以外のコメントにもチェックが付いてしまう場合があります。JetThemeの他、同様の条件式で判定している他のテーマ(「F-light」等)でも同じことが起こります。
本記事ではより正確に「記事投稿者本人」を判定するコードの修正方法を紹介します。
既存コードの判定条件と挙動
既存コードと判定条件
JetThemeでは以下のようなコードでコメント主がブログ投稿者本人かどうか判定し本人マーク<svg ...>~</svg>を表示しています。
<b:if cond='data:commentLevel1.authorUrl == data:post.author.profileUrl'>
<svg aria-hidden='true' class='jt-icon'><use xlink:href='#i-check'/></svg>
</b:if>
※F-lightではdata:commentLevel1.authorUrlではなくdata:comment.authorUrl
これはコメント投稿者とブログ投稿者それぞれのプロフィールURLが一致するかどうかを判定する仕組みです。
生じ得る不具合
しかし、Bloggerのコメント機能では「名前/URL」で誰でも未ログイン状態でプロフィールURLを設定できます。ここにブログ投稿者のプロフィールURLを入力してコメントすると、本人でなくても上記の条件式では一致したとみなされ本人マークが付いてしまいます[1]。下記画像はJetThemeの場合(F-lightでも同様)。
また、この条件式だとプロフィールページに非表示のブログにおいて、著者本人コメントに本人マークが付かず匿名コメントにマークが付いてしまうという不具合があります[2]。下記画像はF-lightの場合(JetThemeでも同様)。
厳密な判定条件と修正コード
data:comment.extraIconClassを利用
シンプルかつより厳密な判定方法としてdata:comment.extraIconClassというデータタグから出力されるblog-authorという値を利用します。[3]
このデータタグは「そのブログ記事の投稿者」
と「コメント投稿者」が一致したコメントでのみblog-authorを付与します。ログイン済みのユーザー情報をもとに判定するため正確に識別できます。また、プロフィールページに非表示のブログであっても適切に機能します。
※投稿者や管理者が複数人いるブログでも同様です。[4]
修正コード
<b:if cond='data:commentLevel1.authorUrl == data:post.author.profileUrl'>
<b:if cond='data:commentLevel1.extraIconClass == "blog-author"'>
※commentLevel2の箇所もLevel1をLevel2に置き換え同様に修正。
<b:if cond='data:comment.authorUrl == data:post.author.profileUrl'>
<b:if cond='data:comment.extraIconClass == "blog-author"'>
なお、旧テーマ(ウィジェットバージョン1)で同様の仕組みを導入する場合は、data:comment.extraIconClassの代わりにdata:comment.authorClassを使ってください。[5]
まとめ
JetTheme・F-light等のコメント欄で使われているdata:comment.authorUrlとdata:post.author.profileUrlの一致判定では、プロフィールURLを入力することで著者本人以外のコメントでも本人マークが付いてしまいます。また、Bloggerプロフィールに非表示のブログでは本人コメントにマークが付かないばかりか匿名コメントにマークが付いてしまいます。
代替として、extraIconClass == "blog-author"(またはauthorClass)を使うことでブログ投稿者とコメント投稿者の一致判定をより正確に行うことができ、プロフィール上に非表示のブログでも適切に動作します。


