DrupalのOpen Graphメタタグ
ウェブサイトのタイトルや要約、画像、URLなどの情報を正確にFacebookにフィードするためのOpen Graphメタタグ(OGP)、Facebook疲れ、といった言葉もチラホラ聞こえる一方、TwitterでもOGPが使われるようになって、OGP自体の重要度は下がっていないと思います。
DrupalではOpen Graph meta tagsというOGPの設定に特化したモジュールがずいぶん前から配布されていて、自分も以前はこれを使わせてもらっていたのですが、何かと使い勝手がよくなくて(スミマセンだいぶ前なので詳しくは覚えていません)、Metatag moduleに乗り換えました。OGPはメタタグ全般の設定のごく一部ですが、node毎にFieldとして組み込まれた画像から、og:imageに設定する画像を自由に選択することもできます。たとえば自分のブログでは今もこの方法で、ブログの設定とは異なる画像Facebookの友人たちに向けてog:imageを設定したりしています。
ただMetatagモジュールは設定項目が多すぎて、お手伝いしているサイトでユーザーさんに自分のブログと同じような設定をしてもらうのは、かなり面倒です。色々やってみた結果、template.phpにOGPの設定を追加する方法に行きつきました。参考サイト
<?php // 以下my_theme_nameの部分はそれぞれのテーマ名に置き換えてください。 function my_theme_name_preprocess_html ( &$variables ) { global $user; foreach ( $user->roles as $role_id => $role ) { $variables['classes_array'][] = "role-id-".$role_id; $variables['classes_array'][] = "role-".strtolower(drupal_clean_css_identifier($role)); } $variables['classes_array'][] = "user-uid-".$user->uid; } function my_theme_name_preprocess_node(&$vars) { // 以下 node type 毎に設定 if ($vars['type'] == 'story') { $og_title = array( '#tag' => 'meta', '#attributes' => array( 'property' => 'og:title', 'content' => $vars['title'], ), ); drupal_add_html_head($og_title, 'og_title'); $img = field_get_items('node', $vars['node'], 'field_images'); $img_url = file_create_url($img[0]['uri']); $og_image = array( '#tag' => 'meta', '#attributes' => array( 'property' => 'og:image', 'content' => $img_url, ), ); drupal_add_html_head($og_image, 'og_image'); $body_field = field_view_field('node', $vars['node'], 'body', array('type' => 'text_plain')); $og_description = array( '#tag' => 'meta', '#attributes' => array( 'property' => 'og:description', 'content' => text_summary($body_field[0]['#markup'], NULL, 150), ), ); drupal_add_html_head($og_description, 'og_description'); }
og:imageはimagesというフィールドの0番目、つまり最初の1枚に固定しているので、ユーザーがフィードする画像を変更したければ、ノードの編集画面でimagesフィールドの順番をドラッグして変えるだけです。og:descriptionは本文の150文字にトリムしています。
template.phpは構文エラーとかがあると、WSOD(white screen of death)、つまり画面が真っ白けになったりしますが、慌てずにソースを見直してください。あとはFacebookのデバッガーで出力しておけば、Facebook側のキャッシュができるはずです。
4年前に自分で似たようなことを書いているのに気づきました。pageテンプレートにOGPメタタグを書くことを説明していますが、Drupal7ではメタタグはhtmlテンプレートなので、Drupal6の時のものです。
©Uemachi Web Factory