Added a colorful new image and fixed the Open Graph attribute.
[WebKit-https.git] / Websites / webkit.org / wp-content / plugins / social-meta.php
1 <?php
2 /*
3 Plugin Name: Social Meta
4 Description: Adds schema.org, Twitter Card, Open Graph meta for posts and pages
5 Version:     1.0
6 Author:      Jonathan Davis
7 Author URI:  http://webkit.org
8 */
9
10 add_action('wp_head', function() {
11
12     $title = get_the_title();
13     $description = get_the_excerpt();
14     $type = 'article';
15
16     $categories = array();
17     $tags = array();
18     $image_url = get_stylesheet_directory_uri() . '/images/ogimage.png';
19     $twitter_handle = '';
20     $published_time = '';
21     $modified_time = '';
22
23     $fb_admins = array(
24         'Jon Davis' => '1085088865',
25         'Tim Hatcher' => '854565306'
26     );
27
28     if (is_front_page() || is_home()) {
29         $title = get_bloginfo('name');
30         $description = get_bloginfo('description');
31         $type = 'website';
32     }
33
34     if (is_single()) {
35
36         $post = get_post();
37
38         if ( has_post_thumbnail() ) {
39             $image_src = wp_get_attachment_image_src( get_post_thumbnail_id($post_id), 'large' );
40             $image_url = $image_src[0];
41         } else {
42             preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
43             if ($matches[1][0]) $image_url = $matches[1][0];
44         }
45
46         $categories = wp_get_object_terms(get_the_ID(), 'category', array('fields' => 'names'));
47         $tags = wp_get_object_terms(get_the_ID(), 'post_tag', array('fields' => 'names'));
48
49         // Post author data is not available in wp_head filter context
50         $twitter_handle = get_the_author_meta('twitter', $post->post_author);
51         $published_time = get_the_time('c');
52         $modified_time = get_the_modified_date('c');
53     }
54
55 ?>
56
57     <!-- Schema.org markup -->
58     <meta itemprop="name" content="<?php echo esc_attr($title); ?>">
59 <?php if ($description): ?>
60     <meta itemprop="description" content="<?php echo esc_attr($description); ?>">
61 <?php endif; ?>
62 <?php if ($image_url): ?>
63     <meta itemprop="image" content="<?php echo esc_url($image_url); ?>">
64 <?php endif; ?>
65
66     <!-- Twitter Card data -->
67     <meta name="twitter:card" content="summary_large_image">
68     <meta name="twitter:site" content="@webkit">
69     <meta name="twitter:title" content="<?php echo esc_attr($title); ?>">
70 <?php if ($description): ?>
71     <meta name="twitter:description" content="<?php echo esc_attr($description); ?>">
72 <?php endif; ?>
73 <?php if ($twitter_handle): ?>
74     <meta name="twitter:creator" content="@<?php echo esc_attr($twitter_handle); ?>">
75 <?php endif; ?>
76 <?php if ($image_url): // Twitter summary card with large image must be at least 280x150px ?>
77     <meta name="twitter:image:src" content="<?php echo esc_url($image_url); ?>">
78 <?php endif; ?>
79
80     <!-- Open Graph data -->
81     <meta property="og:title" content="<?php echo esc_attr($title); ?>">
82     <meta property="og:type" content="<?php echo esc_attr($type); ?>">
83     <meta property="og:url" content="<?php the_permalink(); ?>">
84 <?php if ($image_url): ?>
85     <meta property="og:image" content="<?php echo esc_url($image_url); ?>">
86 <?php endif; ?>
87 <?php if ($description): ?>
88     <meta property="og:description" content="<?php echo esc_attr($description); ?>">
89 <?php endif; ?>
90     <meta property="og:site_name" content="<?php bloginfo('title'); ?>">
91 <?php if ($published_time): ?>
92     <meta property="article:published_time" content="<?php echo $published_time; ?>">
93 <?php endif; ?>
94 <?php if ($modified_time): ?>
95     <meta property="article:modified_time" content="<?php echo $modified_time; ?>">
96 <?php endif; ?>
97 <?php
98     if (!empty($categories)):
99         $section = array_shift($categories);      // The first category is used as the section
100         $tags = array_merge($categories, $tags);  // The rest are prepended to the tag list
101 ?>
102     <meta property="article:section" content="<?php echo esc_attr($section); ?>">
103 <?php
104     endif;
105
106     if (!empty($tags)):
107         foreach($tags as $tag):
108 ?>
109     <meta property="article:tag" content="<?php echo esc_attr($tag); ?>">
110 <?php
111         endforeach;
112     endif;
113
114     if (!empty($fb_admins)):
115         foreach($fb_admins as $id):
116 ?>
117     <meta property="fb:admins" content="<?php echo esc_attr($id); ?>">
118 <?php
119         endforeach;
120     endif;
121 });