Facebook 向けに OGP (Open Graph Protocol) に対応する方が望ましいとした場合、やはり Valid にはなりません。
HTML5 + RDFa ? 等も考えられますが、発想を変えて Facebook との通信のみ meta property="og:XXX" を出力すれば良いのでは ? と考えました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function wg_ogp() { $agent = $_SERVER [ 'HTTP_USER_AGENT' ]; if (preg_match( '/facebook/' , $agent )) { ?> <meta property= "og:site_name" content= "<?php bloginfo('name'); ?>" /> <meta property= "og:title" content= "<?php wg_title(); ?>" /> <meta property= "og:description" content= "<?php wg_desc() ?>" /> <meta property= "og:type" content= "article" /> <meta property= "og:url" content= "<?php echo wg_here(); ?>" /> <meta property= "og:image" content= "<?php wg_img() ?>" /> <meta property= "fb:admins" content= "100001699619269" /> <meta property= "fb:app_id" content= "365262713525479" /> <?php } } |
Validate ツール向けのみ出力 *しない* というルーチンでも良いですが、現状 Facebook 以外には無用なタグなので、上記の様に function.php に追記して header.php から呼んでいます。
# memo: http://developers.facebook.com/tools/debug
wg_ogp() 内にも wg_ で始まる関数がありますが、これは望む表示をするためにひと工夫した関数です。テンプレートにも依存しますが、一例を。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | function wg_desc() { if (is_single()) { if (have_posts()) : while (have_posts()) : the_post(); echo wg_the_content(100, 'r' ); endwhile ; endif ; } else { echo bloginfo( 'description' ); } } function wg_img() { if (is_single() && has_post_thumbnail()) { $img_id = get_post_thumbnail_id(); $img = wp_get_attachment_image_src( $img_id , 'evandr_slide' ); echo $img [0]; } else { echo 'http://wg.drive.ne.jp/rose/wp-content/uploads/2012/04/2011080901-350x200.jpg' ; } } function wg_the_content( $num , $mode = null) { // tab.php sidebar.php $content = get_the_content( $more_link_text , $stripteaser ); $content = apply_filters( 'the_content' , $content ); $content = str_replace ( ']]>' , ']]>' , $content ); $content = preg_replace( '/<div .*>.*<\/div>/' , '' , $content ); $content = str_replace ( "\n" , '' , $content ); $content = strip_tags ( $content ); $content = mb_substr( $content , 0, $num ); if ( $mode && $mode == 'r' ) { return $content ; } else { echo "$content" ; } } |
PHP のプログラマみたいですが、実は I Love Perl です。WordPress が PHP で作られているので、いたしかたありませんね。
- WordPress HTML5, CSS3 Valid (No. 1)
- WordPress HTML5, CSS3 Valid (No. 2)
- WordPress HTML5, CSS3 Valid (No. 3)