loadDefaultFromOptions();
if ($this->sso_active) {
add_filter ( 'language_attributes', array ($this, 'insertLanguageAttributes' ) );
add_action ( 'wp_head', array ($this, 'outputMeta' ), 1 );
// stop Jetpack tags
if (class_exists ( 'JetPack' )) {
add_filter ( 'jetpack_enable_opengraph', '__return_false', 99 );
add_filter ( 'jetpack_enable_open_graph', '__return_false', 99 );
}
// stop Yoast SEO from generating double tags
if (defined('WPSEO_VERSION')) {
global $wpseo_og;
if (isset($wpseo_og)) {
remove_action( 'wpseo_head', array( $wpseo_og, 'opengraph' ), 30 );
}
}
}
}
private function loadDefaultFromOptions() {
$this->default_image = essb_option_value('sso_default_image');
if (essb_option_bool_value('sso_apply_the_content')) {
$this->apply_the_content = true;
}
if (essb_option_bool_value('opengraph_tags')) {
$this->ogtags_active = true;
$this->fbadmins = essb_option_value('opengraph_tags_fbadmins');
$this->fbpage = essb_option_value('opengraph_tags_fbpage');
$this->fbapp = essb_option_value('opengraph_tags_fbapp');
$this->fb_author_profile = essb_option_value('opengraph_tags_fbauthor');
$this->sso_fixhttps = essb_option_bool_value('sso_httpshttp');
$this->sso_imagesize= essb_option_bool_value('sso_imagesize');
}
if (essb_option_bool_value('twitter_card')) {
$this->twitter_cards_active = true;
$this->card_type = essb_option_value('twitter_card_type');
$this->twitter_user = essb_option_value('twitter_card_user');
}
if ($this->ogtags_active || $this->twitter_cards_active) {
$this->sso_active = true;
}
}
private function loadPostSettings() {
if (is_single () || is_page ()) {
easy_share_deactivate();
// loading post default data
$this->post_title = trim( essb_core_convert_smart_quotes( htmlspecialchars_decode(get_the_title ())));;
$this->site_name = get_bloginfo('name');
$this->post_url = get_permalink(get_the_ID());
$this->post_description = trim( essb_core_convert_smart_quotes( htmlspecialchars_decode(essb_core_get_post_excerpt(get_the_ID()))));
if (defined('WPSEO_VERSION')) {
// Collect their Social Descriptions as backups if they're not defined in ours
$this->yoast_og_title = get_post_meta( get_the_ID(), '_yoast_wpseo_opengraph-title' , true );
$this->yoast_og_description = get_post_meta( get_the_ID(), '_yoast_wpseo_opengraph-description' , true );
$this->yoast_og_image = get_post_meta( get_the_ID(), '_yoast_wpseo_opengraph-image' , true );
// Collect their SEO fields as 3rd string backups in case we need them
$this->yoast_seo_title = get_post_meta( get_the_ID(), '_yoast_wpseo_title' , true );
$this->yoast_seo_description = get_post_meta( get_the_ID(), '_yoast_wpseo_metadesc' , true );
if (empty($this->yoast_og_description)) {
$this->yoast_og_description = $this->yoast_seo_description;
}
if (empty($this->yoast_og_title)) {
$this->yoast_og_title = $this->yoast_seo_title;
}
}
$this->post_image = essb_core_get_post_featured_image(get_the_ID());
if ($this->post_image == "") {
$this->post_image = $this->default_image;
}
// end loading post defaults
if ($this->ogtags_active) {
$this->fb_description = get_post_meta ( get_the_ID(), 'essb_post_og_desc', true );
$this->fb_title = get_post_meta ( get_the_ID(), 'essb_post_og_title', true );
$this->fb_image = get_post_meta ( get_the_ID(), 'essb_post_og_image', true );
$this->fb_image1 = get_post_meta ( get_the_ID(), 'essb_post_og_image1', true );
$this->fb_image2 = get_post_meta ( get_the_ID(), 'essb_post_og_image2', true );
$this->fb_image3 = get_post_meta ( get_the_ID(), 'essb_post_og_image3', true );
$this->fb_image4 = get_post_meta ( get_the_ID(), 'essb_post_og_image4', true );
// since 2.0
$this->fb_video_url = get_post_meta ( get_the_ID(), 'essb_post_og_video', true );
$this->fb_video_h = get_post_meta ( get_the_ID(), 'essb_post_og_video_h', true );
$this->fb_video_w = get_post_meta ( get_the_ID(), 'essb_post_og_w', true );
$onpost_fb_authorship = get_post_meta (get_the_ID(), 'essb_post_og_author', true);
if (!empty($onpost_fb_authorship)) {
$this->fb_author_profile = get_post_meta ( get_the_ID(), 'essb_post_og_author', true);
}
if (empty($this->fb_description) && !empty($this->yoast_og_description)) {
$this->fb_description = $this->yoast_og_description;
}
if (empty($this->fb_title) && !empty($this->yoast_og_title)) {
$this->fb_title = $this->yoast_og_title;
}
if (empty($this->fb_image) && !empty($this->yoast_og_image)) {
$this->fb_image = $this->yoast_og_image;
}
if ($this->fb_description == "") {
$this->fb_description = $this->post_description;
}
if ($this->fb_title == "") {
$this->fb_title = $this->post_title;
}
if ($this->fb_image == "") {
$this->fb_image = $this->post_image;
}
if ($this->sso_imagesize) {
if ( has_post_thumbnail( get_the_ID() ) ) {
$thumb = wp_get_attachment_image_src( get_post_thumbnail_id( get_the_ID() ), 'original' );
if ( $this->check_featured_image_size( $thumb ) ) {
$this->fb_image_width = $thumb[1];
$this->fb_image_height = $thumb[2];
}
}
}
}
if ($this->twitter_cards_active) {
$this->twitter_description = get_post_meta(get_the_ID(),'essb_post_twitter_desc',true);
$this->twitter_title = get_post_meta(get_the_ID(),'essb_post_twitter_title',true);
$this->twitter_image = get_post_meta(get_the_ID(),'essb_post_twitter_image',true);
if ($this->twitter_description == "") {
$this->twitter_description = $this->fb_description;
}
if ($this->twitter_title == "") {
$this->twitter_title = $this->fb_title;
}
if ($this->twitter_image == "") {
$this->twitter_image = $this->fb_image;
}
if (empty($this->twitter_description) && !empty($this->yoast_og_description)) {
$this->twitter_description = $this->yoast_og_description;
}
if (empty($this->twitter_title) && !empty($this->yoast_og_title)) {
$this->twitter_title = $this->yoast_og_title;
}
if (empty($this->twitter_image) && !empty($this->yoast_og_image)) {
$this->twitter_image = $this->yoast_og_image;
}
if ($this->twitter_image == "") {
$this->twitter_image = $this->post_image;
}
if ($this->twitter_description == "") {
$this->twitter_description = $this->post_description;
}
if ($this->twitter_title == "") {
$this->twitter_title = $this->post_title;
}
}
easy_share_reactivate();
}
}
public function loadFrontpageTags() {
if (is_front_page()) {
$fp_title = essb_option_value('sso_frontpage_title');
$fp_description = essb_option_value('sso_frontpage_description');
$fp_image = essb_option_value('sso_frontpage_image');
$this->fb_description = $fp_description;
$this->fb_title = $fp_title;
$this->fb_image = $fp_image;
$this->twitter_description = $fp_description;
$this->twitter_title = $fp_title;
$this->twitter_image = $fp_image;
// @updated in 4.2 to be get_bloginfo instead of get_site_url
$this->post_url = get_bloginfo('url');
}
}
public function insertLanguageAttributes($content) {
if ($this->ogtags_active) {
if ($this->fbadmins != '' || $this->fbapp != '') {
$content .= ' prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#"';
} else {
$content .= ' prefix="og: http://ogp.me/ns#"';
}
}
return $content;
}
public function outputMeta() {
global $post;
if (essb_is_module_deactivated_on('sso')) {
return "";
}
$cache_key = "";
if (isset($post)) {
$cache_key = "essb_ogtags_".$post->ID;
if (defined('ESSB_CACHE_ACTIVE')) {
$cached_data = ESSBCache::get($cache_key);
if ($cached_data != '') {
echo "\r\n";
echo $cached_data;
echo "\r\n";
return;
}
}
}
$this->loadPostSettings();
// @since 3.3 front page optimization tags
$this->loadFrontpageTags();
if ($this->ogtags_active) {
$this->buildFacebookMeta();
}
if ($this->twitter_cards_active) {
$this->buildTwitterMeta();
}
$output_meta = "";
echo "\r\n";
foreach ($this->meta as $single) {
$output_meta .= $single."\r\n";
}
echo $output_meta;
echo "\r\n";
if (defined('ESSB_CACHE_ACTIVE')) {
if ($cache_key != '') {
ESSBCache::put($cache_key, $output_meta);
}
}
}
// Twitter
private function buildTwitterMeta() {
if ($this->card_type == "") {
$this->card_type = "summary";
}
else if ($this->card_type == "summaryimage") {
$this->card_type = "summary_large_image";
}
$this->twitterMetaTagBuilder('card', $this->card_type);
if ($this->twitter_user != '') {
$this->twitterMetaTagBuilder('site', '@'.$this->twitter_user);
}
$this->twitterMetaTagBuilder('title', $this->twitter_title, true);
$this->twitterMetaTagBuilder('description', $this->twitter_description);
//$this->twitterMetaTagBuilder('site', $this->card_type);
$this->twitterMetaTagBuilder('url', $this->post_url);
if ($this->card_type == "summary_large_image" && $this->twitter_image != '') {
$this->twitterMetaTagBuilder('image:src', $this->twitter_image);
}
$this->twitterMetaTagBuilder('domain', $this->site_name, true);
}
private function twitterMetaTagBuilder($property = '', $value = '', $apply_filters = false, $prefix = 'twitter') {
if ($apply_filters) {
$value = str_replace ( '\'', "’", $value );
$value = str_replace ( '"', "&qout;", $value );
$value = addslashes(strip_tags($value));
}
if ($property != '' && $value != '') {
$this->meta[] = '';
}
}
// Facebook
private function buildFacebookMeta() {
$this->openGraphMetaTagBuilder('app_id', $this->fbapp, false, 'fb');
$this->openGraphMetaTagBuilder('admins', $this->fbadmins, false, 'fb');
$this->openGraphMetaTagBuilder('title', $this->fb_title, true);
$this->openGraphMetaTagBuilder('description', $this->fb_description, true);
if ($this->sso_fixhttps) {
$this->post_url = str_replace('https://', 'http://', $this->post_url);
}
$this->openGraphMetaTagBuilder('url', $this->post_url);
$this->openGraphMetaTagBuilder('image', $this->fb_image);
if ($this->fb_image1 != '') {
$this->openGraphMetaTagBuilder('image', $this->fb_image1);
}
if ($this->fb_image2 != '') {
$this->openGraphMetaTagBuilder('image', $this->fb_image2);
}
if ($this->fb_image3 != '') {
$this->openGraphMetaTagBuilder('image', $this->fb_image3);
}
if ($this->fb_image4 != '') {
$this->openGraphMetaTagBuilder('image', $this->fb_image4);
}
// image width & height
if ($this->sso_imagesize) {
if ($this->fb_image_width != '') {
$this->openGraphMetaTagBuilder('image:width', esc_attr(absint($this->fb_image_width)), false);
}
if ($this->fb_image_height != '') {
$this->openGraphMetaTagBuilder('image:height', esc_attr(absint($this->fb_image_height)), false);
}
}
$content_type = (is_single () || is_page ()) ? "article" : "website";
$this->openGraphMetaTagBuilder('type', $content_type);
$this->openGraphMetaTagBuilder('site_name', $this->site_name, true);
// @since 2.0 output video meta tags
if ($this->fb_video_url != '') {
$this->openGraphMetaTagBuilder('video', esc_url($this->fb_video_url), false);
$this->openGraphMetaTagBuilder('video:secure_url', esc_url($this->fb_video_url), false);
$this->openGraphMetaTagBuilder('video:height', esc_attr($this->fb_video_h), false);
$this->openGraphMetaTagBuilder('video:width', esc_attr($this->fb_video_w), false);
//$this->openGraphMetaTagBuilder('video:type', 'application/x-shockwave-flash', false);
$this->openGraphMetaTagBuilder('video:type', 'video/mp4', false);
}
if ($this->fb_author_profile != '') {
$this->openGraphMetaTagBuilder('author', esc_attr($this->fb_author_profile), false, 'article');
}
// only for posts
if (is_singular () && !is_front_page() ) {
// @since 4.2 strip those tags as they are not really needed into Facebook sharing
// anymore
//$this->og_tags();
//$this->og_category();
$this->og_publish_date();
if ($this->fbpage != '') {
$this->openGraphMetaTagBuilder('publisher', $this->fbpage, false, 'article');
}
}
}
private function openGraphMetaTagBuilder($property = '', $value = '', $apply_filters = false, $prefix = 'og') {
if ($apply_filters) {
$value = str_replace ( '\'', "’", $value );
$value = str_replace ( '"', "&qout;", $value );
$value = addslashes(strip_tags($value));
}
if ($property != '' && $value != '') {
$this->meta[] = '';
}
}
function og_tags() {
if (! is_singular ()) {
return;
}
$tags = get_the_tags ();
if (! is_wp_error ( $tags ) && (is_array ( $tags ) && $tags !== array ())) {
foreach ( $tags as $tag ) {
$this->openGraphMetaTagBuilder('tag', $tag->name, false, 'article');
}
}
}
public function og_category() {
if ( ! is_singular() ) {
return;
}
$terms = get_the_category();
if ( ! is_wp_error( $terms ) && ( is_array( $terms ) && $terms !== array() ) ) {
foreach ( $terms as $term ) {
$this->openGraphMetaTagBuilder('section', $term->name, false, 'article');
}
}
}
public function og_publish_date() {
if ( ! is_singular() ) {
return;
}
$pub = get_the_date( 'c' );
$this->openGraphMetaTagBuilder('published_time', $pub, false, 'article');
$mod = get_the_modified_date( 'c' );
if ( $mod != $pub ) {
$this->openGraphMetaTagBuilder('modified_time', $mod, false, 'article');
$this->openGraphMetaTagBuilder('updated_time', $mod);
}
}
private function check_featured_image_size( $img_data ) {
if ( ! is_array( $img_data ) ) {
return false;
}
// Get the width and height of the image.
if ( $img_data[1] < 200 || $img_data[2] < 200 ) {
return false;
}
return true;
}
}
?>