options = get_option('wpseo_social');
add_action( 'wpseo_head', array( $this, 'opengraph' ) );
add_filter( 'language_attributes', array( $this, 'add_opengraph_namespace' ) );
}
/**
* Main OpenGraph output.
*/
public function opengraph() {
wp_reset_query();
$this->locale();
$this->site_owner();
$this->og_title();
$this->description();
$this->url();
$this->site_name();
$this->type();
$this->image();
do_action('wpseo_opengraph');
}
/**
* Filter for the namespace, adding the OpenGraph namespace.
*
* @param string $input The input namespace string.
* @return string
*/
public function add_opengraph_namespace( $input ) {
return $input . ' xmlns:og="http://opengraphprotocol.org/schema/"';
}
/**
* Outputs the site owner
*/
public function site_owner() {
if ( isset( $this->options['fbadminapp'] ) && 0 != $this->options['fbadminapp'] ) {
echo "\n";
} else if ( isset( $this->options['fb_admins'] ) && is_array( $this->options['fb_admins'] ) && ( count( $this->options['fb_admins'] ) > 0 ) ) {
$adminstr = '';
foreach ( $this->options['fb_admins'] as $admin_id => $admin ) {
if ( !empty($adminstr) )
$adminstr .= ','.$admin_id;
else
$adminstr = $admin_id;
}
echo "\n";
}
}
/**
* Outputs the SEO title as OpenGraph title.
*/
public function og_title() {
$title = $this->title('');
echo "\n";
}
/**
* Outputs the canonical URL as OpenGraph URL, which consolidates likes and shares.
*/
public function url() {
echo "\n";
}
/**
* Output the locale, doing some conversions to make sure the proper Facebook locale is outputted.
*/
public function locale() {
$locale = apply_filters( 'wpseo_locale', strtolower( get_locale() ) );
// catch some weird locales served out by WP.
$locales = array(
'ar'=> 'ar_ar',
'ca'=> 'ca_es',
'en'=> 'en_us',
'el'=> 'el_gr',
'et'=> 'et_ee',
'fi'=> 'fi_fi',
'ja'=> 'ja_jp',
'sq'=> 'sq_al',
'uk'=> 'uk_ua',
'vi'=> 'vi_vn',
'zh'=> 'zh_cn'
);
if ( isset( $locales[ $locale ] ) )
$locale = $locales[$locale];
echo "\n";
}
/**
* Output the OpenGraph type.
*/
public function type() {
if ( is_singular() ) {
$type = wpseo_get_value('og_type');
if (!$type || $type == '')
$type = 'article';
} else {
$type = 'website';
}
$type = apply_filters( 'wpseo_opengraph_type', $type );
echo "\n";
}
/**
* Output the OpenGraph image elements for all the images within the current post/page.
*
* @return bool
*/
public function image() {
if ( is_singular() ) {
global $post;
$shown_images = array();
if ( is_front_page() ) {
if ( is_front_page() ) {
$og_image = '';
if ( isset( $this->options['og_frontpage_image'] ) )
$og_image = $this->options['og_frontpage_image'];
$og_image = apply_filters( 'wpseo_opengraph_image', $og_image );
if ( isset( $og_image ) && $og_image != '' )
echo "\n";
}
}
if ( function_exists('has_post_thumbnail') && has_post_thumbnail( $post->ID ) ) {
$featured_img = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), apply_filters( 'wpseo_opengraph_image_size', 'medium' ) );
if ( $featured_img ) {
$img = apply_filters( 'wpseo_opengraph_image', $featured_img[0] );
echo "\n";
$shown_images[] = $img;
}
}
if ( preg_match_all( '/]+>/', $post->post_content, $matches ) ) {
foreach ( $matches[0] as $img ) {
if ( preg_match( '/src=("|\')([^"|\']+)("|\')/', $img, $match ) ) {
$img = $match[2];
if ( in_array( $img, $shown_images ) )
continue;
if ( strpos($img, 'http') !== 0 ) {
if ( $img[0] != '/' )
continue;
$img = get_bloginfo('url') . $img;
}
if ( $img != esc_url( $img ) )
continue;
$img = apply_filters( 'wpseo_opengraph_image', $img );
echo "\n";
$shown_images[] = $img;
}
}
}
if ( count( $shown_images ) > 0 )
return true;
}
$og_image = '';
if ( is_front_page() ) {
if ( isset( $this->options['og_frontpage_image'] ) )
$og_image = $this->options['og_frontpage_image'];
if ( isset( $this->options['gp_frontpage_image'] ) )
$gp_image = $this->options['gp_frontpage_image'];
}
if ( empty( $og_image ) && isset( $this->options['og_default_image'] ) )
$og_image = $this->options['og_default_image'];
$og_image = apply_filters( 'wpseo_opengraph_image', $og_image );
if ( isset( $og_image ) && $og_image != '' )
echo "\n";
// @TODO add G+ image stuff
}
/**
* Output the OpenGraph description, specific OG description first, if not, grab the meta description.
*/
public function description() {
$ogdesc = wpseo_get_value('opengraph-description');
if ( !$ogdesc )
$ogdesc = $this->metadesc( false );
if ( $ogdesc && $ogdesc != '' )
echo "\n";
}
/**
* Output the site name straight from the blog info.
*/
public function site_name() {
echo "\n";
}
}
global $wpseo_og;
$wpseo_og = new WPSEO_OpenGraph;