Social Media Share Buttons | MashShare - Version 3.6.3

Version Description

  • Fix: Option Cumulate Http(s) Shares not working for sharedcount.com API endpoint
  • Fix: Tweets can be requested via opensharecount.com
  • Fix: Async cache refresh not fired
  • New: Performance Improvements in collecting sharecount
  • New: Switch default share method to refresh while loading
  • New: If yoast twitter title and description is populated the mashshare generated twitter card will use this settings but still allows to define a custom tweet text.
Download this release

Release Info

Developer ReneHermi
Plugin Icon 128x128 Social Media Share Buttons | MashShare
Version 3.6.3
Comparing to
See all releases

Code changes from version 3.6.2 to 3.6.3

assets/js/mashsb.js CHANGED
@@ -197,19 +197,26 @@ jQuery(document).ready(function ($) {
197
}
198
199
200
- // check the sharecount caching method
201
- //mashsb_check_cache();
202
203
// Fix for the inline post plugin which removes the zero share count
204
if ($('.mashsbcount').text() == '') {
205
$('.mashsbcount').text(0);
206
}
207
208
/**
209
* Check Cache
210
*
211
*/
212
function mashsb_check_cache() {
213
setTimeout(function () {
214
if (typeof (mashsb) && mashsb.refresh == "1") {
215
mashsb_update_cache();
197
}
198
199
200
+
201
202
// Fix for the inline post plugin which removes the zero share count
203
if ($('.mashsbcount').text() == '') {
204
$('.mashsbcount').text(0);
205
}
206
207
+ // check the sharecount caching method
208
+ mashsb_check_cache();
209
+
210
/**
211
* Check Cache
212
*
213
*/
214
function mashsb_check_cache() {
215
+
216
+ if (mashsb_is_rate_limit()) {
217
+ return false;
218
+ }
219
+
220
setTimeout(function () {
221
if (typeof (mashsb) && mashsb.refresh == "1") {
222
mashsb_update_cache();
assets/js/mashsb.min.js CHANGED
@@ -1 +1 @@
1
- var strict;jQuery(document).ready(function(a){function b(){if("undefined"==typeof mashsb.servertime)return!0;var a=Number(mashsb.servertime),b=Math.floor(Date.now()/1e3);return b>a+30?(console.log("rate limited: "+(a+30)),!0):(console.log("not rate limited: "+(a+30)),!1)}function c(b){if("undefined"==typeof b.share)return console.log("No valid result"+b),!1;var c={action:"mashsb_set_fb_shares",shares:b.share,postid:mashsb.postid,url:mashsb.share_url,nonce:mashsb.nonce};a.ajax({type:"post",url:mashsb.ajaxurl,data:c,success:function(a){console.log("Save fb results: "+a)},error:function(a){console.log("Unknown error "+a)}})}function d(a){if("undefined"!=typeof mashsb&&1==mashsb.round_shares){if(a>1e6)return shares=Math.round(a/1e6*10)/10+"M",shares;if(a>1e3)return shares=Math.round(a/1e3*10)/10+"k",shares}return a.toFixed(0)}(navigator.userAgent.match(/(iPhone)/i)||navigator.userAgent.match(/(Android)/i))&&a(".mashicon-whatsapp").show();var e=function(){if(null===document.querySelector(".mashsb-buttons"))return!1;if("undefined"!=typeof mashsb.refresh&&"0"===mashsb.refresh)return!1;if("undefined"==typeof mashsb.share_url&&""!==mashsb.share_url)return!1;if("undefined"==typeof mashsb.postid&&""!==mashsb.postid)return!1;if(b())return!1;var d="https://graph.facebook.com/?id="+mashsb.share_url;a.ajax({type:"GET",url:d,dataType:"json",success:function(a){c(a),console.log(a)},error:function(a){console.log(a)}})};setTimeout(e,3e3),a("body").off("click",".mashicon-pinterest").on("click",".mashicon-pinterest",function(b){b.preventDefault(),console.log("preventDefault:"+b),winWidth=520,winHeight=350;var c=screen.height/2-winHeight/2,d=screen.width/2-winWidth/2,e=a(this).attr("data-mashsb-url");window.open(e,"sharer","top="+c+",left="+d+",toolbar=0,status=0,width="+winWidth+",height="+winHeight+",resizable=yes")}),""==a(".mashsbcount").text()&&a(".mashsbcount").text(0),a(".onoffswitch").on("click",function(){var b=a(this).parents(".mashsb-container");b.find(".onoffswitch").hide(),b.find(".secondary-shares").show(),b.find(".onoffswitch2").show()}),a(".onoffswitch2").on("click",function(){var b=a(this).parents(".mashsb-container");b.find(".onoffswitch").show(),b.find(".secondary-shares").hide()}),"undefined"==typeof lashare_fb&&"undefined"!=typeof mashsb&&a(".mashicon-facebook").click(function(b){winWidth=520,winHeight=550;var c=screen.height/2-winHeight/2,d=screen.width/2-winWidth/2,e=a(this).attr("href");return window.open(e,"sharer","top="+c+",left="+d+",toolbar=0,status=0,width="+winWidth+",height="+winHeight),b.preventDefault(),!1}),"undefined"!=typeof mashsb&&a(".mashicon-twitter").click(function(b){winWidth=520,winHeight=350;var c=screen.height/2-winHeight/2,d=screen.width/2-winWidth/2,e=a(this).attr("href");return"1"===mashsb.twitter_popup&&window.open(e,"sharer","top="+c+",left="+d+",toolbar=0,status=0,width="+winWidth+",height="+winHeight),b.preventDefault(),!1}),"undefined"!=typeof mashsb&&"content"===mashsb.subscribe&&(a(".mashicon-subscribe").not(".trigger_active").nearest(".mashsb-toggle-container").hide(),a(".mashicon-subscribe").click(function(){var b=a(this);return b.hasClass("trigger_active")?(a(b).nearest(".mashsb-toggle-container").slideToggle("fast"),b.removeClass("trigger_active")):(a(".trigger_active").nearest(".mashsb-toggle-container").slideToggle("slow"),a(".trigger_active").removeClass("trigger_active"),a(b).nearest(".mashsb-toggle-container").slideToggle("fast"),b.addClass("trigger_active")),!1})),"undefined"!=typeof mashsb&&"link"===mashsb.subscribe&&a(".mashicon-subscribe").click(function(){var b=mashsb.subscribe_url;a(this).attr("href",b)}),function(a){a.fn.countTo=function(b){return b=b||{},a(this).each(function(){function c(){k+=g,j++,d(k),"function"==typeof e.onUpdate&&e.onUpdate.call(h,k),j>=f&&(i.removeData("countTo"),clearInterval(l.interval),k=e.to,"function"==typeof e.onComplete&&e.onComplete.call(h,k))}function d(a){var b=e.formatter.call(h,a,e);i.text(b)}var e=a.extend({},a.fn.countTo.defaults,{from:a(this).data("from"),to:a(this).data("to"),speed:a(this).data("speed"),refreshInterval:a(this).data("refresh-interval"),decimals:a(this).data("decimals")},b),f=Math.ceil(e.speed/e.refreshInterval),g=(e.to-e.from)/f,h=this,i=a(this),j=0,k=e.from,l=i.data("countTo")||{};i.data("countTo",l),l.interval&&clearInterval(l.interval),l.interval=setInterval(c,e.refreshInterval),d(k)})},a.fn.countTo.defaults={from:0,to:0,speed:1e3,refreshInterval:100,decimals:0,formatter:d,onUpdate:null,onComplete:null}}(jQuery),"undefined"!=typeof mashsb&&1==mashsb.animate_shares&&a(".mashsbcount").length&&a(".mashsbcount").countTo({from:0,to:mashsb.shares,speed:1e3,refreshInterval:100})}),function(a,b){a.fn.nearest=function(c){function d(b){f=f?f.add(b):a(b)}var e,f,g,h,i,j=b.querySelectorAll;return this.each(function(){e=this,a.each(c.split(","),function(){if(h=a.trim(this),h.indexOf("#"))for(i=e.parentNode;i;){if(g=j?i.querySelectorAll(h):a(i).find(h),g.length){d(g);break}i=i.parentNode}else d(j?b.querySelectorAll(h):a(h))})}),f||a()}}(jQuery,document);
1
+ var strict;jQuery(document).ready(function(a){function b(){if("undefined"==typeof mashsb.servertime)return!0;var a=Number(mashsb.servertime),b=Math.floor(Date.now()/1e3);return b>a+30?(console.log("rate limited: "+(a+30)),!0):(console.log("not rate limited: "+(a+30)),!1)}function c(b){if("undefined"==typeof b.share)return console.log("No valid result"+b),!1;var c={action:"mashsb_set_fb_shares",shares:b.share,postid:mashsb.postid,url:mashsb.share_url,nonce:mashsb.nonce};a.ajax({type:"post",url:mashsb.ajaxurl,data:c,success:function(a){console.log("Save fb results: "+a)},error:function(a){console.log("Unknown error "+a)}})}function d(){return b()?!1:void setTimeout(function(){"1"==mashsb.refresh&&e()},6e3)}function e(){var a=window.location.href;a+=a.indexOf("?")>-1?"&mashsb-refresh":"?mashsb-refresh";var b=new XMLHttpRequest;b.open("GET",a,!0),b.send()}function f(a){if("undefined"!=typeof mashsb&&1==mashsb.round_shares){if(a>1e6)return shares=Math.round(a/1e6*10)/10+"M",shares;if(a>1e3)return shares=Math.round(a/1e3*10)/10+"k",shares}return a.toFixed(0)}(navigator.userAgent.match(/(iPhone)/i)||navigator.userAgent.match(/(Android)/i))&&a(".mashicon-whatsapp").show();var g=function(){if(null===document.querySelector(".mashsb-buttons"))return!1;if("undefined"!=typeof mashsb.refresh&&"0"===mashsb.refresh)return!1;if("undefined"==typeof mashsb.share_url&&""!==mashsb.share_url)return!1;if("undefined"==typeof mashsb.postid&&""!==mashsb.postid)return!1;if(b())return!1;var d="https://graph.facebook.com/?id="+mashsb.share_url;a.ajax({type:"GET",url:d,dataType:"json",success:function(a){c(a),console.log(a)},error:function(a){console.log(a)}})};setTimeout(g,3e3),a("body").off("click",".mashicon-pinterest").on("click",".mashicon-pinterest",function(b){b.preventDefault(),console.log("preventDefault:"+b),winWidth=520,winHeight=350;var c=screen.height/2-winHeight/2,d=screen.width/2-winWidth/2,e=a(this).attr("data-mashsb-url");window.open(e,"sharer","top="+c+",left="+d+",toolbar=0,status=0,width="+winWidth+",height="+winHeight+",resizable=yes")}),""==a(".mashsbcount").text()&&a(".mashsbcount").text(0),d(),a(".onoffswitch").on("click",function(){var b=a(this).parents(".mashsb-container");b.find(".onoffswitch").hide(),b.find(".secondary-shares").show(),b.find(".onoffswitch2").show()}),a(".onoffswitch2").on("click",function(){var b=a(this).parents(".mashsb-container");b.find(".onoffswitch").show(),b.find(".secondary-shares").hide()}),"undefined"==typeof lashare_fb&&"undefined"!=typeof mashsb&&a(".mashicon-facebook").click(function(b){winWidth=520,winHeight=550;var c=screen.height/2-winHeight/2,d=screen.width/2-winWidth/2,e=a(this).attr("href");return window.open(e,"sharer","top="+c+",left="+d+",toolbar=0,status=0,width="+winWidth+",height="+winHeight),b.preventDefault(),!1}),"undefined"!=typeof mashsb&&a(".mashicon-twitter").click(function(b){winWidth=520,winHeight=350;var c=screen.height/2-winHeight/2,d=screen.width/2-winWidth/2,e=a(this).attr("href");return"1"===mashsb.twitter_popup&&window.open(e,"sharer","top="+c+",left="+d+",toolbar=0,status=0,width="+winWidth+",height="+winHeight),b.preventDefault(),!1}),"undefined"!=typeof mashsb&&"content"===mashsb.subscribe&&(a(".mashicon-subscribe").not(".trigger_active").nearest(".mashsb-toggle-container").hide(),a(".mashicon-subscribe").click(function(){var b=a(this);return b.hasClass("trigger_active")?(a(b).nearest(".mashsb-toggle-container").slideToggle("fast"),b.removeClass("trigger_active")):(a(".trigger_active").nearest(".mashsb-toggle-container").slideToggle("slow"),a(".trigger_active").removeClass("trigger_active"),a(b).nearest(".mashsb-toggle-container").slideToggle("fast"),b.addClass("trigger_active")),!1})),"undefined"!=typeof mashsb&&"link"===mashsb.subscribe&&a(".mashicon-subscribe").click(function(){var b=mashsb.subscribe_url;a(this).attr("href",b)}),function(a){a.fn.countTo=function(b){return b=b||{},a(this).each(function(){function c(){k+=g,j++,d(k),"function"==typeof e.onUpdate&&e.onUpdate.call(h,k),j>=f&&(i.removeData("countTo"),clearInterval(l.interval),k=e.to,"function"==typeof e.onComplete&&e.onComplete.call(h,k))}function d(a){var b=e.formatter.call(h,a,e);i.text(b)}var e=a.extend({},a.fn.countTo.defaults,{from:a(this).data("from"),to:a(this).data("to"),speed:a(this).data("speed"),refreshInterval:a(this).data("refresh-interval"),decimals:a(this).data("decimals")},b),f=Math.ceil(e.speed/e.refreshInterval),g=(e.to-e.from)/f,h=this,i=a(this),j=0,k=e.from,l=i.data("countTo")||{};i.data("countTo",l),l.interval&&clearInterval(l.interval),l.interval=setInterval(c,e.refreshInterval),d(k)})},a.fn.countTo.defaults={from:0,to:0,speed:1e3,refreshInterval:100,decimals:0,formatter:f,onUpdate:null,onComplete:null}}(jQuery),"undefined"!=typeof mashsb&&1==mashsb.animate_shares&&a(".mashsbcount").length&&a(".mashsbcount").countTo({from:0,to:mashsb.shares,speed:1e3,refreshInterval:100})}),function(a,b){a.fn.nearest=function(c){function d(b){f=f?f.add(b):a(b)}var e,f,g,h,i,j=b.querySelectorAll;return this.each(function(){e=this,a.each(c.split(","),function(){if(h=a.trim(this),h.indexOf("#"))for(i=e.parentNode;i;){if(g=j?i.querySelectorAll(h):a(i).find(h),g.length){d(g);break}i=i.parentNode}else d(j?b.querySelectorAll(h):a(h))})}),f||a()}}(jQuery,document);
includes/admin/settings/register-settings.php CHANGED
@@ -125,7 +125,7 @@ function mashsb_get_registered_settings() {
125
'id' => 'mashsb_sharemethod',
126
'name' => __( 'Share Count', 'mashsb' ),
127
//'desc' => __( '- <i>MashEngine</i> collects shares by direct request to social networks.<br><br><i>SharedCount.com</i> is a third party service free for up to 10.000 daily requests. It collects shares for Facebook, Pinterest, Stumbleupon. (For GDPR compliance you should select the sharedcount.com service.)<br><br>Twitter count is aggreagated via <a href="https://twitcount.com" target="_blank" rel="external nofollow">https://twitcount.com</a>. You must sign up with your Twitter account for this free service to get the twitter share count. Visit the site http://twitcount.com, fill in your website domain and click on <i>Sign up</i>. <br><br><strong>Note: You need <a href="https://mashshare.net/downloads/mashshare-social-networks-addon/" target="_blank">MashShare Social Network Add-On</a> for enabling Twitter count.</strong>', 'mashsb' ),
128
- 'desc' => __( '- <i>SharedCount.com</i> is a third party service free for up to 10.000 daily requests. It collects shares for Facebook.<br><br>Twitter count is aggreagated via <a href="https://twitcount.com" target="_blank" rel="external nofollow">https://twitcount.com</a>. You must sign up with your Twitter account for this free service to get the twitter share count. Visit the site http://twitcount.com, fill in your website domain and click on <i>Sign up</i>. <br><br><strong>Note: You need <a href="https://mashshare.net/downloads/mashshare-social-networks-addon/" target="_blank">MashShare Social Network Add-On</a> for enabling Twitter count.</strong>', 'mashsb' ),
129
'type' => 'select',
130
'options' => array(
131
//'mashengine' => 'MashEngine',
@@ -150,7 +150,7 @@ function mashsb_get_registered_settings() {
150
'caching_method' => array(
151
'id' => 'caching_method',
152
'name' => __( 'Caching Method', 'mashsb' ),
153
- 'desc' => sprintf(__( 'The <i>Async Cache Refresh</i> method never adds additonal load time for a visitor and refreshes the cache asyncronously in the background. <br><br>- New posts are updated at each hour. <br>- Posts older than 3 weeks are updated every 4 hours<br>- Post older than 2 months are updated every 12 hours<br><br> <i>Refresh while loading</i> rebuilds expired cache while page is loading and adds a little extra time during inital page load. <br><br><strong>If shares are not updating</strong> or site is heavy cached try <i>Refresh while loading!</i> That\'s the default method MashShare was using before version 3.0<br><br>Shares still not shown? <a href="%1s" target="_blank">Read this first!</a>', 'mashsb' ), 'http://docs.mashshare.net/article/4-try-this-first-before-troubleshooting'),
154
'type' => 'select',
155
'options' => array(
156
'async_cache' => 'Async Cache Refresh',
@@ -188,12 +188,12 @@ function mashsb_get_registered_settings() {
188
'type' => 'text',
189
'size' => 'medium'
190
),
191
- // 'disable_sharecount' => array(
192
- // 'id' => 'disable_sharecount',
193
- // 'name' => __( 'Activate GDPR/DSGVO compliance', 'mashsb' ),
194
- // 'desc' => __( 'Use this if share counts should not be counted. You need to disable share counts if you want to be GDPR compliant, because the share count agregation is collecting shares from third party social networks. Default: false', 'mashsb' ),
195
- // 'type' => 'checkbox'
196
- // ),
197
'hide_sharecount' => array(
198
'id' => 'hide_sharecount',
199
'name' => __( 'Hide Sharecount', 'mashsb' ),
125
'id' => 'mashsb_sharemethod',
126
'name' => __( 'Share Count', 'mashsb' ),
127
//'desc' => __( '- <i>MashEngine</i> collects shares by direct request to social networks.<br><br><i>SharedCount.com</i> is a third party service free for up to 10.000 daily requests. It collects shares for Facebook, Pinterest, Stumbleupon. (For GDPR compliance you should select the sharedcount.com service.)<br><br>Twitter count is aggreagated via <a href="https://twitcount.com" target="_blank" rel="external nofollow">https://twitcount.com</a>. You must sign up with your Twitter account for this free service to get the twitter share count. Visit the site http://twitcount.com, fill in your website domain and click on <i>Sign up</i>. <br><br><strong>Note: You need <a href="https://mashshare.net/downloads/mashshare-social-networks-addon/" target="_blank">MashShare Social Network Add-On</a> for enabling Twitter count.</strong>', 'mashsb' ),
128
+ 'desc' => __( '- <i>SharedCount.com</i> is a third party service free for up to 10.000 daily requests. It collects shares for Facebook.<br><br>Twitter count is aggreagated via <a href="https://opensharecount.com" target="_blank" rel="external nofollow">https://opensharecount.com</a>. You must sign up with your Twitter account for this free service to get the twitter share count. Visit the site https://opensharecount.com, fill in your website domain and click on <i>Sign up</i>. <br><br><strong>Note: You need <a href="https://mashshare.net/downloads/mashshare-social-networks-addon/" target="_blank">MashShare Social Network Add-On</a> for enabling Twitter count.</strong>', 'mashsb' ),
129
'type' => 'select',
130
'options' => array(
131
//'mashengine' => 'MashEngine',
150
'caching_method' => array(
151
'id' => 'caching_method',
152
'name' => __( 'Caching Method', 'mashsb' ),
153
+ 'desc' => sprintf(__( 'The <i>Async Cache Refresh</i> method never adds additonal load time for a visitor and refreshes the cache asyncronously in the background. <br><br>- New posts are updated at each hour. <br>- Posts older than 3 weeks are updated every 4 hours<br>- Post older than 2 months are updated every 12 hours<br><br> <i>Refresh while loading</i> rebuilds expired cache while page is loading and adds a little extra time during inital page load. <br><br><strong>If shares are not updating</strong> or site is heavy cached try <i>Refresh while loading!</i> That\'s the default method.<br>Shares still not shown? <a href="%1s" target="_blank">Read this first!</a>', 'mashsb' ), 'http://docs.mashshare.net/article/4-try-this-first-before-troubleshooting'),
154
'type' => 'select',
155
'options' => array(
156
'async_cache' => 'Async Cache Refresh',
188
'type' => 'text',
189
'size' => 'medium'
190
),
191
+ 'disable_sharecount' => array(
192
+ 'id' => 'disable_sharecount',
193
+ 'name' => __( 'Disable Sharecount', 'mashsb' ),
194
+ 'desc' => __( 'Use this if share should not be counted. Default: false', 'mashsb' ),
195
+ 'type' => 'checkbox'
196
+ ),
197
'hide_sharecount' => array(
198
'id' => 'hide_sharecount',
199
'name' => __( 'Hide Sharecount', 'mashsb' ),
includes/header-meta-tags.php CHANGED
@@ -10,7 +10,7 @@ if( !defined( 'ABSPATH' ) )
10
11
class MASHSB_HEADER_META_TAGS {
12
13
- protected $postID = 0;
14
protected $imageURL;
15
protected $post_title;
16
protected $post_featured_image;
@@ -39,7 +39,7 @@ class MASHSB_HEADER_META_TAGS {
39
protected $yoast_twitter_image;
40
protected $yoast_twitter_creator;
41
// yoast social settings
42
- protected $yoast = array();
43
protected $post;
44
45
public function __construct() {
@@ -54,12 +54,12 @@ class MASHSB_HEADER_META_TAGS {
54
return false;
55
}
56
57
- $this->post = $post;
58
- $this->postID = get_the_ID();
59
- $this->post_title = $this->get_title();
60
- $this->post_featured_image = $this->get_featured_image();
61
- $this->post_description = $this->sanitize_data( $this->get_excerpt_by_id( $this->postID ) );
62
- $this->pinterest_image = $this->get_pinterest_image_url();
63
$this->pinterest_description = $this->get_pinterest_description();
64
65
$this->get_og_data();
@@ -77,20 +77,18 @@ class MASHSB_HEADER_META_TAGS {
77
* @return void
78
*/
79
public function get_og_data() {
80
- $this->og_title = $this->sanitize_data( get_post_meta( $this->postID, 'mashsb_og_title', true ) );
81
- $this->og_description = $this->sanitize_data( get_post_meta( $this->postID, 'mashsb_og_description', true ) );
82
- $this->og_image = $this->get_image_url();
83
- $this->og_type = $this->sanitize_data( get_post_meta( $this->postID, 'mashsb_og_type', true ) );
84
- $this->twitter_title = $this->sanitize_data( get_post_meta( $this->postID, 'mashsb_custom_tweet', true ) );
85
$this->twitter_creator = $this->get_twitter_creator();
86
- $this->twitter_site = mashsb_get_twitter_username();
87
- }
88
-
89
- public function sanitize_data($string){
90
- //return $string;
91
- return htmlspecialchars(preg_replace( "/\r|\n/", " ", $string ));
92
}
93
94
95
/**
96
* Get Yoast open graph and social data
@@ -104,33 +102,33 @@ class MASHSB_HEADER_META_TAGS {
104
}
105
106
global $wpseo_og;
107
- if( has_action( 'wpseo_head', array($wpseo_og, 'opengraph') ) && function_exists('wpseo_replace_vars') ) {
108
// Yoast open graph tags
109
- $this->yoast_og_title = get_post_meta( $this->postID, '_yoast_wpseo_opengraph-title', true );
110
$this->yoast_og_description = get_post_meta( $this->postID, '_yoast_wpseo_opengraph-description', true );
111
- $this->yoast_og_image = get_post_meta( $this->postID, '_yoast_wpseo_opengraph-image', true );
112
-
113
- $this->yoast_og_title = wpseo_replace_vars($this->yoast_og_title, $this->post);
114
- $this->yoast_og_description = wpseo_replace_vars($this->yoast_og_description, $this->post);
115
- $this->yoast_og_image = wpseo_replace_vars($this->yoast_og_image, $this->post);
116
-
117
-
118
119
// Yoast twitter card data
120
- $this->yoast_twitter_title = get_post_meta( $this->postID, '_yoast_wpseo_twitter-title', true );
121
$this->yoast_twitter_description = get_post_meta( $this->postID, '_yoast_wpseo_twitter-description', true );
122
- $this->yoast_twitter_image = get_post_meta( $this->postID, '_yoast_wpseo_twitter-image', true );
123
-
124
- $this->yoast_twitter_title = wpseo_replace_vars( $this->yoast_twitter_title, $this->post );
125
$this->yoast_twitter_description = wpseo_replace_vars( $this->yoast_twitter_description, $this->post );
126
- $this->yoast_twitter_image = wpseo_replace_vars( $this->yoast_twitter_image, $this->post );
127
128
// Yoast SEO title and description
129
- $this->yoast_seo_title = get_post_meta( $this->postID, '_yoast_wpseo_title', true );
130
$this->yoast_seo_description = get_post_meta( $this->postID, '_yoast_wpseo_metadesc', true );
131
-
132
- $this->yoast_seo_title = wpseo_replace_vars($this->yoast_seo_title, $this->post);
133
- $this->yoast_seo_description = wpseo_replace_vars($this->yoast_seo_description, $this->post);
134
135
// Remove Yoast open graph and twitter cards data from head of site
136
if( $this->is_open_graph() ) {
@@ -188,6 +186,7 @@ class MASHSB_HEADER_META_TAGS {
188
// Default return value
189
return $this->post_title;
190
}
191
/**
192
* Get the og type
193
*
@@ -237,11 +236,11 @@ class MASHSB_HEADER_META_TAGS {
237
return trim( get_the_excerpt() );
238
}
239
240
- $the_post = get_post( $post_id ); //Gets post ID
241
- $the_excerpt = $the_post->post_content; //Gets post_content to be used as a basis for the excerpt
242
$excerpt_length = 35; //Sets excerpt length by words
243
- $the_excerpt = strip_tags( strip_shortcodes( $the_excerpt ) ); //Strips tags and images
244
- $words = explode( ' ', $the_excerpt, $excerpt_length + 1 );
245
if( count( $words ) > $excerpt_length ) {
246
array_pop( $words );
247
$the_excerpt = implode( ' ', $words );
@@ -279,13 +278,13 @@ class MASHSB_HEADER_META_TAGS {
279
if( empty( $og_image ) ) {
280
return;
281
}
282
-
283
$upload_dir = wp_upload_dir();
284
- $img_src = str_replace( $upload_dir['baseurl'], $upload_dir['basedir'], $this->get_og_image() );
285
-
286
- $imagesize = is_readable($img_src) ? getimagesize( $img_src ) : '';
287
288
- if(!empty($imagesize)){
289
return $imagesize;
290
}
291
}
@@ -455,10 +454,7 @@ class MASHSB_HEADER_META_TAGS {
455
* @return string
456
*/
457
public function get_twitter_title() {
458
- if( !empty( $this->twitter_title ) ) {
459
- return $this->twitter_title;
460
- }
461
-
462
if( defined( 'WPSEO_VERSION' ) ) {
463
if( !empty( $this->yoast_twitter_title ) ) {
464
return $this->yoast_twitter_title;
@@ -467,6 +463,11 @@ class MASHSB_HEADER_META_TAGS {
467
return $this->yoast_seo_title;
468
}
469
}
470
// Default return value
471
return $this->post_title;
472
}
@@ -492,7 +493,7 @@ class MASHSB_HEADER_META_TAGS {
492
* @global array $ob_wp_simplepodcastpress
493
*/
494
public function remove_simple_podcast_press_og() {
495
- if(!$this->is_open_graph()){
496
return;
497
}
498
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
@@ -552,14 +553,14 @@ class MASHSB_HEADER_META_TAGS {
552
* @return string HTML
553
*/
554
public function render_open_graph_meta() {
555
-
556
if( !$this->is_open_graph() ) {
557
$html = '';
558
return $html;
559
}
560
561
$opengraph = PHP_EOL . '<!-- Open Graph Meta Tags generated by MashShare ' . MASHSB_VERSION . ' - https://mashshare.net -->';
562
- $opengraph .= PHP_EOL . '<meta property="og:type" content="'.$this->get_og_type().'" /> ';
563
if( $this->get_og_title() ) {
564
$opengraph .= PHP_EOL . '<meta property="og:title" content="' . $this->get_og_title() . '" />';
565
}
@@ -584,7 +585,7 @@ class MASHSB_HEADER_META_TAGS {
584
$opengraph .= PHP_EOL . '<meta property="article:modified_time" content="' . get_post_modified_time( 'c' ) . '" />';
585
$opengraph .= PHP_EOL . '<meta property="og:updated_time" content="' . get_post_modified_time( 'c' ) . '" />';
586
$opengraph .= PHP_EOL . '<!-- Open Graph Meta Tags generated by MashShare ' . MASHSB_VERSION . ' - https://www.mashshare.net -->';
587
-
588
return $opengraph;
589
}
590
@@ -601,9 +602,9 @@ class MASHSB_HEADER_META_TAGS {
601
}
602
603
$twittercard = PHP_EOL . '<!-- Twitter Card generated by MashShare ' . MASHSB_VERSION . ' - https://www.mashshare.net -->';
604
-
605
$imagesize = $this->get_og_image_size();
606
- if( is_array( $imagesize ) && isset($imagesize[0]) && isset($imagesize[1]) ) {
607
$twittercard .= PHP_EOL . '<meta property="og:image:width" content="' . $imagesize[0] . '" />';
608
$twittercard .= PHP_EOL . '<meta property="og:image:height" content="' . $imagesize[1] . '" />';
609
}
@@ -659,9 +660,9 @@ class MASHSB_HEADER_META_TAGS {
659
*/
660
function mashsb_meta_tags_init() {
661
global $mashsb_meta_tags, $mashsb_options;
662
-
663
// Do not show meta boxes
664
- if(isset($mashsb_options['user_roles_for_sharing_options']) && in_array('disable', $mashsb_options['user_roles_for_sharing_options'])){
665
return;
666
}
667
10
11
class MASHSB_HEADER_META_TAGS {
12
13
+ protected $postID = 0;
14
protected $imageURL;
15
protected $post_title;
16
protected $post_featured_image;
39
protected $yoast_twitter_image;
40
protected $yoast_twitter_creator;
41
// yoast social settings
42
+ protected $yoast = array();
43
protected $post;
44
45
public function __construct() {
54
return false;
55
}
56
57
+ $this->post = $post;
58
+ $this->postID = get_the_ID();
59
+ $this->post_title = $this->get_title();
60
+ $this->post_featured_image = $this->get_featured_image();
61
+ $this->post_description = $this->sanitize_data( $this->get_excerpt_by_id( $this->postID ) );
62
+ $this->pinterest_image = $this->get_pinterest_image_url();
63
$this->pinterest_description = $this->get_pinterest_description();
64
65
$this->get_og_data();
77
* @return void
78
*/
79
public function get_og_data() {
80
+ $this->og_title = $this->sanitize_data( get_post_meta( $this->postID, 'mashsb_og_title', true ) );
81
+ $this->og_description = $this->sanitize_data( get_post_meta( $this->postID, 'mashsb_og_description', true ) );
82
+ $this->og_image = $this->get_image_url();
83
+ $this->og_type = $this->sanitize_data( get_post_meta( $this->postID, 'mashsb_og_type', true ) );
84
+ $this->twitter_title = $this->sanitize_data( get_post_meta( $this->postID, 'mashsb_custom_tweet', true ) );
85
$this->twitter_creator = $this->get_twitter_creator();
86
+ $this->twitter_site = mashsb_get_twitter_username();
87
}
88
89
+ public function sanitize_data( $string ) {
90
+ return htmlspecialchars( preg_replace( "/\r|\n/", " ", $string ) );
91
+ }
92
93
/**
94
* Get Yoast open graph and social data
102
}
103
104
global $wpseo_og;
105
+ if( has_action( 'wpseo_head', array($wpseo_og, 'opengraph') ) && function_exists( 'wpseo_replace_vars' ) ) {
106
// Yoast open graph tags
107
+ $this->yoast_og_title = get_post_meta( $this->postID, '_yoast_wpseo_opengraph-title', true );
108
$this->yoast_og_description = get_post_meta( $this->postID, '_yoast_wpseo_opengraph-description', true );
109
+ $this->yoast_og_image = get_post_meta( $this->postID, '_yoast_wpseo_opengraph-image', true );
110
+
111
+ $this->yoast_og_title = wpseo_replace_vars( $this->yoast_og_title, $this->post );
112
+ $this->yoast_og_description = wpseo_replace_vars( $this->yoast_og_description, $this->post );
113
+ $this->yoast_og_image = wpseo_replace_vars( $this->yoast_og_image, $this->post );
114
+
115
+
116
117
// Yoast twitter card data
118
+ $this->yoast_twitter_title = get_post_meta( $this->postID, '_yoast_wpseo_twitter-title', true );
119
$this->yoast_twitter_description = get_post_meta( $this->postID, '_yoast_wpseo_twitter-description', true );
120
+ $this->yoast_twitter_image = get_post_meta( $this->postID, '_yoast_wpseo_twitter-image', true );
121
+
122
+ $this->yoast_twitter_title = wpseo_replace_vars( $this->yoast_twitter_title, $this->post );
123
$this->yoast_twitter_description = wpseo_replace_vars( $this->yoast_twitter_description, $this->post );
124
+ $this->yoast_twitter_image = wpseo_replace_vars( $this->yoast_twitter_image, $this->post );
125
126
// Yoast SEO title and description
127
+ $this->yoast_seo_title = get_post_meta( $this->postID, '_yoast_wpseo_title', true );
128
$this->yoast_seo_description = get_post_meta( $this->postID, '_yoast_wpseo_metadesc', true );
129
+
130
+ $this->yoast_seo_title = wpseo_replace_vars( $this->yoast_seo_title, $this->post );
131
+ $this->yoast_seo_description = wpseo_replace_vars( $this->yoast_seo_description, $this->post );
132
133
// Remove Yoast open graph and twitter cards data from head of site
134
if( $this->is_open_graph() ) {
186
// Default return value
187
return $this->post_title;
188
}
189
+
190
/**
191
* Get the og type
192
*
236
return trim( get_the_excerpt() );
237
}
238
239
+ $the_post = get_post( $post_id ); //Gets post ID
240
+ $the_excerpt = $the_post->post_content; //Gets post_content to be used as a basis for the excerpt
241
$excerpt_length = 35; //Sets excerpt length by words
242
+ $the_excerpt = strip_tags( strip_shortcodes( $the_excerpt ) ); //Strips tags and images
243
+ $words = explode( ' ', $the_excerpt, $excerpt_length + 1 );
244
if( count( $words ) > $excerpt_length ) {
245
array_pop( $words );
246
$the_excerpt = implode( ' ', $words );
278
if( empty( $og_image ) ) {
279
return;
280
}
281
+
282
$upload_dir = wp_upload_dir();
283
+ $img_src = str_replace( $upload_dir['baseurl'], $upload_dir['basedir'], $this->get_og_image() );
284
285
+ $imagesize = is_readable( $img_src ) ? getimagesize( $img_src ) : '';
286
+
287
+ if( !empty( $imagesize ) ) {
288
return $imagesize;
289
}
290
}
454
* @return string
455
*/
456
public function get_twitter_title() {
457
+ // Return Yoast twitter title
458
if( defined( 'WPSEO_VERSION' ) ) {
459
if( !empty( $this->yoast_twitter_title ) ) {
460
return $this->yoast_twitter_title;
463
return $this->yoast_seo_title;
464
}
465
}
466
+
467
+ // Return MashShare Twitter title
468
+ if( !empty( $this->twitter_title ) ) {
469
+ return $this->twitter_title;
470
+ }
471
// Default return value
472
return $this->post_title;
473
}
493
* @global array $ob_wp_simplepodcastpress
494
*/
495
public function remove_simple_podcast_press_og() {
496
+ if( !$this->is_open_graph() ) {
497
return;
498
}
499
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
553
* @return string HTML
554
*/
555
public function render_open_graph_meta() {
556
+
557
if( !$this->is_open_graph() ) {
558
$html = '';
559
return $html;
560
}
561
562
$opengraph = PHP_EOL . '<!-- Open Graph Meta Tags generated by MashShare ' . MASHSB_VERSION . ' - https://mashshare.net -->';
563
+ $opengraph .= PHP_EOL . '<meta property="og:type" content="' . $this->get_og_type() . '" /> ';
564
if( $this->get_og_title() ) {
565
$opengraph .= PHP_EOL . '<meta property="og:title" content="' . $this->get_og_title() . '" />';
566
}
585
$opengraph .= PHP_EOL . '<meta property="article:modified_time" content="' . get_post_modified_time( 'c' ) . '" />';
586
$opengraph .= PHP_EOL . '<meta property="og:updated_time" content="' . get_post_modified_time( 'c' ) . '" />';
587
$opengraph .= PHP_EOL . '<!-- Open Graph Meta Tags generated by MashShare ' . MASHSB_VERSION . ' - https://www.mashshare.net -->';
588
+
589
return $opengraph;
590
}
591
602
}
603
604
$twittercard = PHP_EOL . '<!-- Twitter Card generated by MashShare ' . MASHSB_VERSION . ' - https://www.mashshare.net -->';
605
+
606
$imagesize = $this->get_og_image_size();
607
+ if( is_array( $imagesize ) && isset( $imagesize[0] ) && isset( $imagesize[1] ) ) {
608
$twittercard .= PHP_EOL . '<meta property="og:image:width" content="' . $imagesize[0] . '" />';
609
$twittercard .= PHP_EOL . '<meta property="og:image:height" content="' . $imagesize[1] . '" />';
610
}
660
*/
661
function mashsb_meta_tags_init() {
662
global $mashsb_meta_tags, $mashsb_options;
663
+
664
// Do not show meta boxes
665
+ if( isset( $mashsb_options['user_roles_for_sharing_options'] ) && in_array( 'disable', $mashsb_options['user_roles_for_sharing_options'] ) ) {
666
return;
667
}
668
includes/install.php CHANGED
@@ -95,7 +95,7 @@ function mashsb_install() {
95
'twitter_card' => '1',
96
'open_graph' => '1',
97
'mashsb_sharemethod' => 'mashengine',
98
- 'caching_method' => 'async_cache',
99
'mashsu_methods' => 'disabled',
100
'responsive_buttons' => '1',
101
'button_margin' => '1',
95
'twitter_card' => '1',
96
'open_graph' => '1',
97
'mashsb_sharemethod' => 'mashengine',
98
+ 'caching_method' => 'refresh_loading',
99
'mashsu_methods' => 'disabled',
100
'responsive_buttons' => '1',
101
'button_margin' => '1',
includes/sharecount-functions.php CHANGED
@@ -280,50 +280,6 @@ function mashsb_is_cache_refresh() {
280
}
281
282
return false;
283
-
284
-
285
- // New cache on singular pages
286
- //
287
- // Refreshing cache on blog posts like categories will lead
288
- // to high load and multiple API requests so we only check
289
- // the main url on these other pages
290
- // if( is_singular() && isset($post->ID) ) {
291
- // // last updated timestamp
292
- // $last_updated = get_post_meta( $post->ID, 'mashsb_timestamp', true );
293
- // if( !empty( $last_updated ) ) {
294
- // MASHSB()->logger->info( 'mashsb_is_cache_refresh - is_singular() url: ' . get_permalink($post->ID) . ' : last updated:' . date( 'Y-m-d H:i:s', $last_updated ) );
295
- // }
296
- // } else if( mashsb_get_main_url() ) {
297
- //
298
- // // Get transient timeout and calculate last update time
299
- // $url = mashsb_get_main_url();
300
- // $transient = '_transient_timeout_mashcount_' . md5( $url );
301
- // $last_updated = get_option( $transient ) - mashsb_get_expiration();
302
- // if( !empty( $last_updated ) ) {
303
- // MASHSB()->logger->info( 'mashsb_is_cache_refresh() mashsb_get_main_url() url: ' . $url . ' last updated:' . date( 'Y-m-d H:i:s', $last_updated ) );
304
- // }
305
- // } else {
306
- // // No valid URL so do not refresh cache
307
- // MASHSB()->logger->info( 'mashsb_is_cache_refresh: No valid URL - do not refresh cache' );
308
- // return false;
309
- // }
310
- //
311
- // // No timestamp so let's create cache for the first time
312
- // if( empty( $last_updated ) ) {
313
- // MASHSB()->logger->info( 'mashsb_is_cache_refresh: No Timestamp. Refresh Cache' );
314
- // return true;
315
- // }
316
- //
317
- // // The caching expiration
318
- // $expiration = mashsb_get_expiration();
319
- // $next_update = $last_updated + $expiration;
320
- // MASHSB()->logger->info( 'mashsb_is_cache_refresh. Next update ' . date( 'Y-m-d H:i:s', $next_update ) . ' current time: ' . date( 'Y-m-d H:i:s', time() ) );
321
- //
322
- // // Refresh Cache when last update plus expiration time is older than current time
323
- // if( ($last_updated + $expiration) <= time() ) {
324
- // MASHSB()->logger->info( 'mashsb_is_cache_refresh: Refresh Cache!' );
325
- // return true;
326
- // }
327
}
328
329
/**
280
}
281
282
return false;
283
}
284
285
/**
includes/sharedcount.class.php CHANGED
@@ -12,177 +12,217 @@
12
*/
13
class mashsbSharedcount {
14
15
- private $url, $timeout;
16
-
17
- function __construct( $url, $timeout = 10, $apikey = '' ) {
18
- global $mashsb_options;
19
- $this->url = rawurlencode( $url );
20
- $this->timeout = $timeout;
21
- $this->apikey = trim( $apikey );
22
- }
23
-
24
-
25
-
26
- public function getFBTWCounts() {
27
- global $mashsb_options;
28
-
29
- isset( $mashsb_options['facebook_count_mode'] ) ? $fb_mode = $mashsb_options['facebook_count_mode'] : $fb_mode = '';
30
-
31
- $sharecounts = $this->get_sharedcount();
32
-
33
- if( !$sharecounts ) {
34
- $this->sharecount = new stdClass;
35
- $this->sharecount->total = 0;
36
- return $this->sharecount;
37
- }
38
- $counts = array('shares' => array(), 'total' => 0);
39
- switch ( $fb_mode ) {
40
- case $fb_mode === 'likes':
41
- $counts['shares']['fb'] = $sharecounts['Facebook']['like_count'];
42
- break;
43
- case $fb_mode === 'total':
44
- $counts['shares']['fb'] = $sharecounts['Facebook']['total_count'];
45
- break;
46
- default:
47
- $counts['shares']['fb'] = $sharecounts['Facebook']['share_count'];
48
- }
49
- $counts['shares']['tw'] = $sharecounts['Twitter'];
50
-
51
-
52
-
53
- foreach ( $counts['shares'] as $mashsbcounts => $sharecount ){
54
- $counts['total'] += ( int ) $sharecount;
55
- }
56
-
57
- mashdebug()->error( "sharedcount.com getFBTWCounts: " . $counts['total'] );
58
-
59
- $totalArr = array('total' => $counts['total']);
60
- $objMerged = ( object ) array_merge( ( array ) $sharecounts, ( array ) $totalArr );
61
- return $objMerged;
62
- }
63
-
64
- /* Only used when mashshare-networks is enabled */
65
-
66
- function getAllCounts() {
67
- global $mashsb_options;
68
-
69
- isset( $mashsb_options['facebook_count_mode'] ) ? $fb_mode = $mashsb_options['facebook_count_mode'] : $fb_mode = '';
70
-
71
- $sharecounts = $this->get_sharedcount();
72
- if( !$sharecounts ) {
73
- $this->sharecount = new stdClass;
74
- $this->sharecount->total = 0;
75
- return $this->sharecount;
76
- }
77
-
78
- $counts = array('shares' => array(), 'total' => 0);
79
- $counts = array('shares' => array(), 'total' => 0);
80
- switch ( $fb_mode ) {
81
- case $fb_mode === 'likes':
82
- $counts['shares']['fb'] = $sharecounts['Facebook']['like_count'];
83
- break;
84
- case $fb_mode === 'total':
85
- $counts['shares']['fb'] = $sharecounts['Facebook']['total_count'];
86
- break;
87
- default:
88
- $counts['shares']['fb'] = $sharecounts['Facebook']['share_count'];
89
- }
90
- isset( $sharecounts['Twitter'] ) ? $counts['shares']['tw'] = $sharecounts['Twitter'] : $counts['shares']['tw'] = 0;
91
- isset( $sharecounts['GooglePlusOne'] ) ? $counts['shares']['gp'] = $sharecounts['GooglePlusOne'] : $counts['shares']['gp'] = 0;
92
- isset( $sharecounts['LinkedIn'] ) ? $counts['shares']['li'] = $sharecounts['LinkedIn'] : $counts['shares']['li'] = 0;
93
- isset( $sharecounts['StumbleUpon'] ) ? $counts['shares']['st'] = $sharecounts['StumbleUpon'] : $counts['shares']['st'] = 0;
94
- isset( $sharecounts['Pinterest'] ) ? $counts['shares']['pin'] = $sharecounts['Pinterest'] : $counts['shares']['pin'] = 0;
95
-
96
- $total = 0;
97
- foreach ( $counts['shares'] as $totalcount )
98
- $total += ( int ) $totalcount;
99
- $totalArr = array('total' => $total);
100
- $objMerged = ( object ) array_merge( ( array ) $sharecounts, ( array ) $totalArr );
101
- mashdebug()->info( "sharedcount.com getAllCounts: " . $counts['total'] );
102
- return $objMerged;
103
- }
104
-
105
- function update_sharedcount_domain( $domain = false ) {
106
- global $mashsb_options;
107
- if( !$domain ) {
108
- try {
109
- $domain_obj = $this->_curl( 'http://' . $mashsb_options["mashsharer_sharecount_domain"] . "/account?apikey=" . $this->apikey );
110
- $domain = $domain_obj["domain"];
111
- } catch ( Exception $e ) {
112
- mashdebug()->error( "error: " . $domain_obj );
113
return 0;
114
- }
115
- }
116
- $mashsb_options["mashsharer_sharecount_domain"] = $domain;
117
- update_option( 'mashsb_settings', $mashsb_options );
118
- return 1;
119
- }
120
-
121
- private function _curl( $url ) {
122
- $curl = curl_init();
123
- curl_setopt( $curl, CURLOPT_URL, $url );
124
- curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
125
- curl_setopt( $curl, CURLOPT_CONNECTTIMEOUT, 5 );
126
- curl_setopt( $curl, CURLOPT_TIMEOUT, 5 ); //timeout in seconds
127
- $curl_results = curl_exec( $curl );
128
- curl_close( $curl );
129
- return json_decode( $curl_results, true );
130
- }
131
-
132
- function get_sharedcount() {
133
- mashdebug()->info( "Share URL: " . $this->url );
134
- global $mashsb_options;
135
- if( empty( $this->apikey ) ) {
136
- return 0; //quit early if there's no API key.
137
- }
138
-
139
- $domain = isset( $mashsb_options['mashsharer_sharecount_domain'] ) ? trim( $mashsb_options['mashsharer_sharecount_domain'] ) : '';
140
- if( !isset( $domain ) || empty( $domain ) ) {
141
- $domain = "free.sharedcount.com";
142
- $this->update_sharedcount_domain( $domain );
143
- }
144
-
145
- try {
146
- $counts = array();
147
- //$counts = $this->_curl( 'http://' . $domain . "/?url=" . $this->url . "&apikey=" . $this->apikey );
148
- $counts = $this->_curl( 'https://api.sharedcount.com/v1.0/?url=' . $this->url . "&apikey=" . $this->apikey );
149
-
150
- if( isset( $counts["Error"] ) && isset( $counts['Domain'] ) && $counts["Type"] === "domain_apikey_mismatch" ) {
151
- $this->update_sharedcount_domain( $counts['Domain'] );
152
- return 0;
153
- } else if( isset( $counts["Error"] ) && isset( $counts['Type'] ) && $counts['Type'] === 'invalid_api_key' ) {
154
- $this->update_sharedcount_domain();
155
- return 0;
156
- }
157
-
158
- mashdebug()->error( "Facebook total count: " . $counts['Facebook']['total_count'] );
159
- MASHSB()->logger->info( "URL: " . urldecode( $this->url ) . " API Key:" . $this->apikey . " sharedcount.com FB total_count: " . $counts['Facebook']['total_count'] . " FB share_count:" . $counts['Facebook']['share_count'] . " G+:" . $counts['GooglePlusOne'] . " Linkedin:" . $counts['LinkedIn'] . " Stumble: " . $counts['StumbleUpon'] . " Pinterest: " . $counts['Pinterest'] );
160
-
161
- $return = is_array($counts) ? array_merge($counts, array('Twitter' => $this->getTwitterShares())) : array('Twitter' => $this->getTwitterShares());
162
-
163
-
164
- return $return;
165
- } catch ( Exception $e ) {
166
- mashdebug()->error( "error: " . $counts );
167
- MASHSB()->logger->info( 'ERROR: Curl()' . $counts );
168
- return 0;
169
- }
170
- mashdebug()->error( "error2: " . $counts );
171
- MASHSB()->logger->info( 'ERROR 2: Curl()' . $counts );
172
- return 0;
173
- }
174
-
175
- /**
176
- * Get twitter tweet count if social network add-on is installed
177
- * @return int
178
- */
179
- private function getTwitterShares(){
180
- if ( class_exists( 'mashnetTwitter')){
181
- $twitter = new mashnetTwitter($this->url);
182
- return empty($twitter->getTwitterShares()) ? 0 : $twitter->getTwitterShares();
183
- }
184
- return 0;
185
- }
186
187
}
188
12
*/
13
class mashsbSharedcount {
14
15
+ private $url, $timeout;
16
+ private $http_scheme_url;
17
+ private $https_scheme_url;
18
+
19
+ function __construct( $url, $timeout = 10, $apikey = '' ) {
20
+ global $mashsb_options;
21
+
22
+ // Uncomment for testing
23
+ //$url = 'https://google.com';
24
+
25
+ // remove http and https
26
+ $url_host_path = preg_replace( "(^https?://)", "", $url );
27
+
28
+ // build new urls
29
+ $this->http_scheme_url = rawurlencode( 'http://' . $url_host_path );
30
+ $this->https_scheme_url = rawurlencode( 'https://' . $url_host_path );
31
+
32
+ $this->url = rawurlencode( $url );
33
+ $this->timeout = $timeout;
34
+ $this->apikey = trim( $apikey );
35
+ }
36
+
37
+ /**
38
+ * Collect shares for facebook and twitter (Twitter not supported any longer)
39
+ * @global array $mashsb_options
40
+ * @return type
41
+ */
42
+ public function getFBTWCounts() {
43
+ global $mashsb_options;
44
+
45
+ isset( $mashsb_options['facebook_count_mode'] ) ? $fb_mode = $mashsb_options['facebook_count_mode'] : $fb_mode = '';
46
+
47
+ $sharecounts = $this->get_sharedcount();
48
+
49
+ if( !$sharecounts ) {
50
+ $this->sharecount = new stdClass;
51
+ $this->sharecount->total = 0;
52
+ return $this->sharecount;
53
+ }
54
+ $counts = array('shares' => array(), 'total' => 0);
55
+ switch ( $fb_mode ) {
56
+ case $fb_mode === 'likes':
57
+ $counts['shares']['fb'] = $sharecounts['Facebook']['like_count'];
58
+ $counts['shares']['fb_https'] = $sharecounts['https']['Facebook']['like_count'];
59
+
60
+ break;
61
+ case $fb_mode === 'total':
62
+ $counts['shares']['fb'] = $sharecounts['Facebook']['total_count'];
63
+ $counts['shares']['fb_https'] = $sharecounts['https']['Facebook']['total_count'];
64
+ break;
65
+ default:
66
+ $counts['shares']['fb'] = $sharecounts['Facebook']['share_count'];
67
+ $counts['shares']['fb_https'] = $sharecounts['https']['Facebook']['share_count'];
68
+ }
69
+ $counts['shares']['tw'] = $sharecounts['Twitter'];
70
+
71
+
72
+
73
+ foreach ( $counts['shares'] as $mashsbcounts => $sharecount ) {
74
+ $counts['total'] += ( int ) $sharecount;
75
+ }
76
+
77
+ mashdebug()->error( "sharedcount.com getFBTWCounts: " . $counts['total'] );
78
+
79
+ $totalArr = array('total' => $counts['total']);
80
+ $objMerged = ( object ) array_merge( ( array ) $sharecounts, ( array ) $totalArr );
81
+ return $objMerged;
82
+ }
83
+
84
+ /* Only used when mashshare-networks is enabled */
85
+
86
+ function getAllCounts() {
87
+ global $mashsb_options;
88
+
89
+ isset( $mashsb_options['facebook_count_mode'] ) ? $fb_mode = $mashsb_options['facebook_count_mode'] : $fb_mode = '';
90
+
91
+ $sharecounts = $this->get_sharedcount();
92
+ if( !$sharecounts ) {
93
+ $this->sharecount = new stdClass;
94
+ $this->sharecount->total = 0;
95
+ return $this->sharecount;
96
+ }
97
+
98
+ $counts = array('shares' => array(), 'total' => 0);
99
+ switch ( $fb_mode ) {
100
+ case $fb_mode === 'likes':
101
+ $counts['shares']['fb'] = $sharecounts['Facebook']['like_count'];
102
+ $counts['shares']['fb_https'] = $sharecounts['https']['Facebook']['like_count'];
103
+ break;
104
+ case $fb_mode === 'total':
105
+ $counts['shares']['fb'] = $sharecounts['Facebook']['total_count'];
106
+ $counts['shares']['fb_https'] = $sharecounts['https']['Facebook']['total_count'];
107
+ break;
108
+ default:
109
+ $counts['shares']['fb'] = $sharecounts['Facebook']['share_count'];
110
+ $counts['shares']['fb_https'] = $sharecounts['https']['Facebook']['share_count'];
111
+ }
112
+ isset( $sharecounts['Twitter'] ) ? $counts['shares']['tw'] = $sharecounts['Twitter'] : $counts['shares']['tw'] = 0;
113
+ isset( $sharecounts['GooglePlusOne'] ) ? $counts['shares']['gp'] = $sharecounts['GooglePlusOne'] : $counts['shares']['gp'] = 0;
114
+ isset( $sharecounts['LinkedIn'] ) ? $counts['shares']['li'] = $sharecounts['LinkedIn'] : $counts['shares']['li'] = 0;
115
+ isset( $sharecounts['StumbleUpon'] ) ? $counts['shares']['st'] = $sharecounts['StumbleUpon'] : $counts['shares']['st'] = 0;
116
+ isset( $sharecounts['Pinterest'] ) ? $counts['shares']['pin'] = $sharecounts['Pinterest'] : $counts['shares']['pin'] = 0;
117
+ isset( $sharecounts['https']['Pinterest'] ) ? $counts['shares']['pin_https'] = $sharecounts['https']['Pinterest'] : $counts['shares']['pin_https'] = 0;
118
+
119
+
120
+
121
+ $total = 0;
122
+ foreach ( $counts['shares'] as $totalcount ) {
123
+ $total += ( int ) $totalcount;
124
+ }
125
+ $totalArr = array('total' => $total);
126
+ $objMerged = ( object ) array_merge( ( array ) $sharecounts, ( array ) $totalArr );
127
+ mashdebug()->info( "sharedcount.com getAllCounts: " . $counts['total'] );
128
+ return $objMerged;
129
+ }
130
+
131
+ /**
132
+ *
133
+ * @global array $mashsb_options
134
+ * @param type $domain
135
+ * @return int
136
+ */
137
+ // function update_sharedcount_domain( $domain = false ) {
138
+ // global $mashsb_options;
139
+ // if( !$domain ) {
140
+ // try {
141
+ // $domain_obj = $this->_curl( 'http://' . $mashsb_options["mashsharer_sharecount_domain"] . "/account?apikey=" . $this->apikey );
142
+ // $domain = $domain_obj["domain"];
143
+ // } catch ( Exception $e ) {
144
+ // mashdebug()->error( "error: " . $domain_obj );
145
+ // return 0;
146
+ // }
147
+ // }
148
+ // $mashsb_options["mashsharer_sharecount_domain"] = $domain;
149
+ // update_option( 'mashsb_settings', $mashsb_options );
150
+ // return 1;
151
+ // }
152
+
153
+ private function _curl( $url ) {
154
+ $curl = curl_init();
155
+ curl_setopt( $curl, CURLOPT_URL, $url );
156
+ curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
157
+ curl_setopt( $curl, CURLOPT_CONNECTTIMEOUT, 5 );
158
+ curl_setopt( $curl, CURLOPT_TIMEOUT, 5 ); //timeout in seconds
159
+ $curl_results = curl_exec( $curl );
160
+ curl_close( $curl );
161
+ return json_decode( $curl_results, true );
162
+ }
163
+
164
+ /**
165
+ * Get share count from sharedcount.com API
166
+ * @global array $mashsb_options
167
+ * @return mixed array | int
168
+ */
169
+ function get_sharedcount() {
170
+
171
+ global $mashsb_options;
172
+
173
+ if( empty( $this->apikey ) ) {
174
+ return 0; //quit early if there's no API key.
175
+ }
176
+
177
+ try {
178
+ $counts = array();
179
+ $httpsShares = array();
180
+
181
+ if( isset( $mashsb_options['cumulate_http_https'] ) ) {
182
+ $counts = $this->_curl( 'https://api.sharedcount.com/v1.0/?url=' . $this->http_scheme_url . "&apikey=" . $this->apikey );
183
+ $httpsShares = $this->_curl( 'https://api.sharedcount.com/v1.0/?url=' . $this->https_scheme_url . "&apikey=" . $this->apikey );
184
+ } else {
185
+ $counts = $this->_curl( 'https://api.sharedcount.com/v1.0/?url=' . $this->url . "&apikey=" . $this->apikey );
186
+ }
187
+
188
+ if( isset( $counts["Error"] ) && isset( $counts['Domain'] ) && $counts["Type"] === "domain_apikey_mismatch" ) {
189
+ return 0;
190
+ } else if( isset( $counts["Error"] ) && isset( $counts['Type'] ) && $counts['Type'] === 'invalid_api_key' ) {
191
+ return 0;
192
+ }
193
+
194
+ $tweets = $this->getTwitterShares();
195
+
196
+ $counts = is_array( $counts ) ? array_merge( $counts, array('Twitter' => $tweets) ) : array('Twitter' => $tweets);
197
+
198
+ $counts['https'] = $httpsShares;
199
+
200
+ return $counts;
201
+ } catch ( Exception $e ) {
202
+ mashdebug()->error( "error: " . $e );
203
+ MASHSB()->logger->info( 'ERROR: Curl()' . $e );
204
return 0;
205
+ }
206
+ mashdebug()->error( "error2: " . $counts );
207
+ MASHSB()->logger->info( 'ERROR 2: Curl()' . $counts );
208
+ return 0;
209
+ }
210
+
211
+ /**
212
+ * Get twitter tweet count if social network add-on is installed
213
+ * @return int
214
+ */
215
+ private function getTwitterShares() {
216
+
217
+ if( class_exists( 'mashnetTwitter' ) ) {
218
+ $twitter = new mashnetTwitter( $this->url );
219
+
220
+ $tweets = $twitter->getTwitterShares();
221
+
222
+ return empty( $tweets ) ? 0 : $tweets;
223
+ }
224
+ return 0;
225
+ }
226
227
}
228
mashshare.php CHANGED
@@ -6,7 +6,7 @@
6
* Description: Mashshare is a Share functionality inspired by the the great website Mashable for Facebook and Twitter. More networks available.
7
* Author: René Hermenau
8
* Author URI: https://www.mashshare.net
9
- * Version: 3.6.2
10
* Text Domain: mashsb
11
* Domain Path: /languages
12
@@ -35,7 +35,7 @@ if( !defined( 'ABSPATH' ) )
35
36
// Plugin version
37
if( !defined( 'MASHSB_VERSION' ) ) {
38
- define( 'MASHSB_VERSION', '3.6.2' );
39
}
40
41
// Debug mode
6
* Description: Mashshare is a Share functionality inspired by the the great website Mashable for Facebook and Twitter. More networks available.
7
* Author: René Hermenau
8
* Author URI: https://www.mashshare.net
9
+ * Version: 3.6.3
10
* Text Domain: mashsb
11
* Domain Path: /languages
12
35
36
// Plugin version
37
if( !defined( 'MASHSB_VERSION' ) ) {
38
+ define( 'MASHSB_VERSION', '3.6.3' );
39
}
40
41
// Debug mode
readme.txt CHANGED
@@ -9,7 +9,7 @@ License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
Tags: Share buttons, Social Sharing, social media, Facebook, Twitter, Subscribe, Traffic posts, pages, widget, social share buttons, analytics, email, dsgvo
10
Requires at least: 3.6+
11
Tested up to: 5.1
12
- Stable tag: 3.6.2
13
Requires PHP: 5.2
14
15
Social Media Share Buttons for Twitter, Facebook and other social networks. Highly customizable Social Media ecosystem
@@ -250,6 +250,14 @@ Read here more about this: http://docs.mashshare.net/article/10-facebook-is-show
250
251
== Changelog ==
252
253
= 3.6.2 =
254
* New: Necessary change because of new facebook API
255
* New: Remove mashengine
@@ -307,10 +315,7 @@ https://www.mashshare.net/changelog/
307
308
== Upgrade Notice ==
309
310
- = 3.6.2 =
311
- * New: Necessary change because of new facebook API
312
- * New: Remove mashengine
313
- * New: Remove GDPR option. Not needed any longer as all shares are collected via sharedcount.com
314
- * New: Add admin notice notifying user of new facebook API.
315
316
9
Tags: Share buttons, Social Sharing, social media, Facebook, Twitter, Subscribe, Traffic posts, pages, widget, social share buttons, analytics, email, dsgvo
10
Requires at least: 3.6+
11
Tested up to: 5.1
12
+ Stable tag: 3.6.3
13
Requires PHP: 5.2
14
15
Social Media Share Buttons for Twitter, Facebook and other social networks. Highly customizable Social Media ecosystem
250
251
== Changelog ==
252
253
+ = 3.6.3 =
254
+ * Fix: Option Cumulate Http(s) Shares not working for sharedcount.com API endpoint
255
+ * Fix: Tweets can be requested via opensharecount.com
256
+ * Fix: Async cache refresh not fired
257
+ * New: Performance Improvements in collecting sharecount
258
+ * New: Switch default share method to refresh while loading
259
+ * New: If yoast twitter title and description is populated the mashshare generated twitter card will use this settings but still allows to define a custom tweet text.
260
+
261
= 3.6.2 =
262
* New: Necessary change because of new facebook API
263
* New: Remove mashengine
315
316
== Upgrade Notice ==
317
318
+ = 3.6.3 =
319
+ * Fix: Option Cumulate Http(s) Shares not working for sharedcount.com API endpoint
320
321