またまたエラー
前回の記事の続きです
1週間ぐらいでエラーは消えたのですが、警告が残りました。
必須ではないですが、以下の項目を埋めないと検索結果のリッチリザルトとして掲載されません。
- performer: 出演者、講師等の情報
- performer.name: 名前
- offers: 申し込み情報
- offers.validFrom: 申し込み開始日
- offers.price: 価格
- offers.url: 申し込みページURL
- offers.availability: InStock, SoldOut, PreOrder
- offers.priceCurrency: 3 文字の通貨コード(JPY)
- image:画像URL
本文に入ってはいますが、抽出するのが面倒な情報もあります。
さて、どうするか悩みました。
解決策
今回はイベント情報ではなく、アイキャッチ画像の方に手動で情報を埋め込むことにしました。
理由は
- 同じ講座でも開催日ごとに別イベントとして作成している(全部で99件あるので修正面倒)
- 講座毎にアイキャッチ画像を用意している(同じ講座は同じ画像を使用している)
- 本文のフォーマットが同一ではないので、自動抽出が面倒!
メディアで各画像の代替テキスト、キャプション、説明に情報を手動で埋め込みました。
- 代替テキスト: performer.name
- キャプション: offers.price
- 説明: offers.validFrom
他の情報は適当に取得します。
今回も前回同様、テーマのeo-loop-single-event.phpを修正します。
eo-loop-single-event.php
<div class="eo-event-details event-entry-meta">
<?php
//If it has one, display the thumbnail
if ( has_post_thumbnail() ) {
the_post_thumbnail( 'thumbnail', array( 'class' => 'attachment-thumbnail eo-event-thumbnail',
'itemprop' => 'image' ) );
$image_id = get_post_thumbnail_id(get_the_ID());
$metadata = wp_get_attachment_metadata( $image_id );
$price = get_post($image_id)->post_excerpt;
$validFrom = get_post($image_id)->post_content;
$image_alt = get_post_meta($image_id, '_wp_attachment_image_alt', true);
if ($image_alt) {
?>
<span itemprop='performer' itemscope itemtype='http://schema.org/Person'>
<meta itemprop='name' content="<?php echo $image_alt; ?>">
</span>
<?php
}
}
$offers_url = eo_get_permalink();
?>
<span itemprop='offers' itemscope itemtype='http://schema.org/Offer'>
<meta itemprop='url' content="<?php echo $offers_url; ?>">
<meta itemprop='availability' content="InStock">
<meta itemprop='price' content="<?php echo $price; ?>">
<meta itemprop='priceCurrency' content="JPY">
<meta itemprop='validFrom' content="<?php echo $validFrom; ?>">
</span>
<?php
//A list of event details: venue, categories, tags.
echo eo_get_event_meta_list();
?>
</div><!-- .event-entry-meta -->
画像の代替テキストやキャプション情報の取得に手間取りました。
当初、wp_get_attachment_metadata
を使うのかと勘違いしていました。
この関数から取得できる情報は全く別で正しくは以下になります。
-
- 代替テキスト
カスタムフィールドの_wp_attachment_image_alt
から取得 - キャプション
概要(post_excerpt)から取得 - 説明
本文(post_content)から取得
- 代替テキスト
ちょっとわかりづらい仕様ですね。
availabilityは常にInStockに固定しちゃってます。
できた!表示された!
まだ、完全には更新されてませんが、一部リッチリザルトが表示されるようになりました。
全部更新されれば「まちゼミ久が原」で表示されるかな。