Completed
Pull Request — master (#1)
by Daryl
04:02
created

wp-share-this.php (2 issues)

Labels
Severity
1
<?php
2
3
namespace Clubdeuce\WPShareThis;
4
5
/**
6
 * Class WP_Share_This
7
 * @package Clubdeuce\WPShareThis
8
 *
9
 * @link http://www.sharethis.com/support/customization/how-to-set-custom-buttons/
10
 */
11
class WP_Share_This {
12
13
	/**
14
	 * @var bool
15
	 */
16
	private static $_facebook_og = true;
17
18
	/**
19
	 * @var string
20
	 */
21
	private static $_id = null;
22
23
	/**
24
	 * @var array
25
	 */
26
	private static $_services = array();
27
28
	/**
29
	 *
30
	 */
31
	public static function initialize() {
32
33
		add_action( 'wp_enqueue_scripts', array( __CLASS__, '_wp_enqueue_scripts' ) );
34
		add_action( 'wp_head', array( __CLASS__, '_wp_head' ) );
35
36
	}
37
38
	/**
39
	 *
40
	 */
41
	public static function _wp_enqueue_scripts() {
42
43
		$id = self::$_id;
44
45
		wp_enqueue_script('sharethis', "//platform-api.sharethis.com/js/sharethis.js#property={$id}&product=unknown", null, false, true );
46
47
	}
48
49
	/**
50
	 *
51
	 */
52
	public static function _wp_head() {
53
54
		if ( self::$_facebook_og ) {
55
			self::_facebook_og();
56
		}
57
58
	}
59
60
	/**
61
	 * The ShareThis account id.
62
	 *
63
	 * @param string $id
64
	 */
65
	public static function register_id( $id ) {
66
67
		self::$_id = $id;
68
69
	}
70
71
	/**
72
	 * @param string $service
73
	 * @param array  $params
74
	 */
75
	public static function register_service( $service, $params = array() ) {
76
77
		self::$_services[ $service ] = $params;
78
79
	}
80
81
	/**
82
	 * @param \WP_Post|null
83
	 */
84
	public static function the_sharing_links( $post = null ) {
85
86
		array_walk( self::$_services, array( __CLASS__, '_render_sharing_link' ), $post );
87
88
	}
89
90
	/**
91
	 * @param array    $params
92
	 * @param string   $service
93
	 * @param \WP_Post $post
94
	 */
95
	public static function _render_sharing_link( $params, $service, $post ) {
96
97
		$classes = array();
98
99
		// set some defaults
100
		$args = wp_parse_args( $params, array(
101
			'url'         => null,
102
			'short_url'   => null,
103
			'title'       => null,
104
			'image'       => null,
105
			'description' => null,
106
			'username'    => null,
107
			'message'     => null,
108
			'share_count' => true,
109
		) );
110
111
		// if we have a post, we will use post values for the defaults
112
		if ( $post instanceof \WP_Post ) {
113
			$args = wp_parse_args( $params, array(
114
				'url'         => get_permalink( $post ),
115
				'short_url'   => null,
116
				'title'       => $post->post_title,
117
				'image'       => null,
118
				'description' => get_the_excerpt( $post ),
119
				'username'    => null,
120
				'message'     => null,
121
				'share_count' => true,
122
			) );
123
124
			if ( has_post_thumbnail( $post ) ) {
125
				$args['image'] = get_the_post_thumbnail_url( $post );
126
			}
127
		}
128
129
		printf(
130
			'<div data-network="%1$s" class="st-custom-button %2$s"%3$s%4$s%5$s%6$s%7$s%8$s%9$s>%10$s%11$s</div>',
131
			$service,
132
			implode( ' ', apply_filters( 'wpst_link_classes', $classes, $service ) ),
133
			self::_item_sharing_property( 'url',         $args['url'] ),
134
			self::_item_sharing_property( 'short_url',   $args['short_url'] ),
135
			self::_item_sharing_property( 'title',       $args['title'] ),
136
			self::_item_sharing_property( 'image',       $args['image'] ),
137
			self::_item_sharing_property( 'description', $args['description'] ),
138
			self::_item_sharing_property( 'username',    $args['username'] ),
139
			self::_item_sharing_property( 'message',     $args['message'] ),
140
			apply_filters( 'wpst_link_text', ucfirst( $service ) ),
141
			self::_item_sharing_count( $args['share_count'] )
142
		);
143
144
	}
145
146
	/**
147
	 * @link https://developers.facebook.com/docs/sharing/webmasters#basic
148
	 */
149
	private static function _facebook_og() {
150
151
		printf( '<meta property="og:url" content="%1$s" />' . PHP_EOL, self::_og_url() );
152
		printf( '<meta property="og:type" content="%1$s" />' . PHP_EOL, self::_og_type() );
153
		printf( '<meta property="og:title" content="%1$s" />' . PHP_EOL, self::_og_title() );
154
155
		if ( ! ( empty( $description = self::_og_description() ) ) ) {
156
			printf(	'<meta property="og:description" content="%1$s" />' . PHP_EOL, $description );
157
		}
158
159
		if ( $image_url = self::_og_image() ) {
160
			printf( '<meta property="og:image" content="%1$s" />' . PHP_EOL, $image_url );
161
		}
162
163
	}
164
165
	/**
166
	 * @return mixed|void
167
	 */
168
	private static function _og_url() {
169
170
		$url = get_permalink();
171
172
		if ( is_home() || is_front_page() ) {
173
			$url = home_url();
174
		}
175
176
		return apply_filters( 'wpst_og_url', esc_url( $url ) );
177
178
	}
179
180
	/**
181
	 * @return mixed|void
182
	 */
183
	private static function _og_type() {
184
185
		$type = 'website';
186
187
		if ( is_single() ) {
0 ignored issues
show
The function is_single was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

187
		if ( /** @scrutinizer ignore-call */ is_single() ) {
Loading history...
188
			$type = 'article';
189
		}
190
191
		return apply_filters( 'wpst_og_type', $type );
0 ignored issues
show
The function apply_filters was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

191
		return /** @scrutinizer ignore-call */ apply_filters( 'wpst_og_type', $type );
Loading history...
192
193
	}
194
195
196
	/**
197
	 * @return mixed|void
198
	 */
199 View Code Duplication
	private static function _og_title() {
200
201
		$title = get_the_title();
202
203
		if ( is_home() || is_front_page() ) {
204
			$title = get_bloginfo( 'name' );
205
		}
206
207
		return apply_filters( 'wpst_og_title', wp_kses_post( $title ) );
208
209
	}
210
211
	/**
212
	 * @return mixed|void
213
	 */
214 View Code Duplication
	private static function _og_description() {
215
216
		$description = apply_filters( 'the_excerpt', get_the_excerpt() );
217
218
		if ( is_home() || is_front_page() ) {
219
			$description = get_bloginfo( 'description' );
220
		}
221
222
		return apply_filters( 'wpst_og_description', wp_kses_post( $description ) );
223
224
	}
225
226
	/**
227
	 * @return mixed|void
228
	 */
229
	private static function _og_image() {
230
231
		$image_url = get_the_post_thumbnail_url();
232
233
		if ( is_home() || is_front_page() ) {
234
			$image_url = '';
235
		}
236
237
		return apply_filters( 'wpst_og_image', esc_url( $image_url ) );
238
239
	}
240
241
	/**
242
	 * @param string $property
243
	 * @param string $value
244
	 *
245
	 * @return string
246
	 */
247
	private static function _item_sharing_property( $property, $value ) {
248
249
		$text  = '';
250
		$maybe = apply_filters( "wpst_item_{$property}", $value );
251
252
		if ( ! empty( $maybe ) ) {
253
			$text = sprintf( ' data-%1$s="%2$s" ', str_replace('_', '-', $property ), esc_attr( $maybe ) );
254
		}
255
256
		return $text;
257
258
	}
259
260
	/**
261
	 * @param  bool $show
262
	 *
263
	 * @return string
264
	 */
265
	private static function _item_sharing_count( $show ) {
266
267
		$text = '';
268
269
		if ( $show ) {
270
			$text = '<span class="count"></span>';
271
		}
272
273
		return $text;
274
275
	}
276
277
}
278