element.
*/
function opengraph_add_namespace( $output ) {
global $opengraph_ns_set;
$opengraph_ns_set = true;
$output .= ' xmlns:og="' . esc_attr(OPENGRAPH_NS_URI) . '"';
return $output;
}
add_filter('language_attributes', 'opengraph_add_namespace');
/**
* Get the Open Graph metadata for the current page.
*
* @uses apply_filters() Calls 'opengraph_{$name}' for each property name
* @uses apply_filters() Calls 'opengraph_metadata' before returning metadata array
*/
function opengraph_metadata() {
$metadata = array();
// defualt properties defined at http://opengraphprotocol.org/
$properties = array(
// required
'title', 'type', 'image', 'url',
// optional
'site_name', 'description',
// location
'longitude', 'latitude', 'street-address', 'locality', 'region',
'postal-code', 'country-name',
// contact
'email', 'phone_number', 'fax_number',
);
foreach ($properties as $property) {
$filter = 'opengraph_' . $property;
$metadata["og:$property"] = apply_filters($filter, '');
}
return apply_filters('opengraph_metadata', $metadata);
}
/**
* Register filters for default Open Graph metadata.
*/
function opengraph_default_metadata() {
add_filter('opengraph_title', 'opengraph_default_title', 5);
add_filter('opengraph_type', 'opengraph_default_type', 5);
add_filter('opengraph_image', 'opengraph_default_image', 5);
add_filter('opengraph_url', 'opengraph_default_url', 5);
add_filter('opengraph_site_name', 'opengraph_default_sitename', 5);
add_filter('opengraph_description', 'opengraph_default_description', 5);
}
add_filter('wp', 'opengraph_default_metadata');
/**
* Default title property, using the page title.
*/
function opengraph_default_title( $title = '' )
{
if ( is_singular() && empty($title) )
{
global $wp_query;
$title = $wp_query->queried_object->post_title;
}
return $title;
}
/**
* Default type property.
*/
function opengraph_default_type( $type = '' )
{
if ( empty($type) ) $type = 'blog';
return $type;
}
/**
* Default image property, using the post-thumbnail.
*/
function opengraph_default_image( $image = '' )
{
global $wp_query;
if ( is_singular() && empty($image) && current_theme_supports('post-thumbnails') && has_post_thumbnail($wp_query->queried_object_id) )
{
$thumbnail = wp_get_attachment_image_src( get_post_thumbnail_id( $wp_query->queried_object_id ), 'post-thumbnail');
if ($thumbnail)
{
$image = $thumbnail[0];
}
}
return $image;
}
/**
* Default url property, using the permalink for the page.
*/
function opengraph_default_url( $url = '' )
{
if ( ! empty( $url )) return $url;
if ( is_singular() )
{
global $wp_query;
$url = get_permalink($wp_query->queried_object_id);
}
else
{
$url = trailingslashit( get_bloginfo('url' ));
}
return $url;
}
/**
* Default site_name property, using the bloginfo name.
*/
function opengraph_default_sitename( $name = '' )
{
if ( empty($name) ) $name = get_bloginfo('name');
return $name;
}
/**
* Default description property, using the bloginfo description.
*/
function opengraph_default_description( $description = '' )
{
if ( !empty($description) ) return $description;
// get blog description as default
$description = get_bloginfo('description');
// replace the description with a more specific one if available
global $wp_query;
if ( is_singular() && ! empty( $wp_query->queried_object->post_excerpt ))
$description = apply_filters( 'get_the_excerpt' , $wp_query->queried_object->post_excerpt );
return $description;
}
/**
* Output Open Graph tags in the page header.
*/
function opengraph_meta_tags()
{
global $opengraph_ns_set;
$xml_ns = '';
if ( !$opengraph_ns_set )
$xml_ns = 'xmlns:og="' . esc_attr(OPENGRAPH_NS_URI) . '" ';
$metadata = opengraph_metadata();
foreach ( $metadata as $key => $value ) {
if ( empty($key) || empty($value) ) continue;
echo '' . "\n";
}
}
add_action('wp_head', 'opengraph_meta_tags');