Completed
Push — update/sync-jetpack-likes ( 5debbd )
by
unknown
37:56 queued 27:27
created

Jetpack_Likes::is_post_likeable()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 1
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
1
<?php
2
/**
3
 * Module Name: Likes
4
 * Module Description: Give visitors an easy way to show they appreciate your content.
5
 * First Introduced: 2.2
6
 * Sort Order: 23
7
 * Requires Connection: Yes
8
 * Auto Activate: No
9
 * Module Tags: Social
10
 * Feature: Engagement
11
 * Additional Search Queries: like, likes, wordpress.com
12
 */
13
14
Jetpack::dns_prefetch( array(
15
	'//widgets.wp.com',
16
	'//s0.wp.com',
17
	'//0.gravatar.com',
18
	'//1.gravatar.com',
19
	'//2.gravatar.com',
20
) );
21
22
include_once dirname( __FILE__ ) . '/likes/jetpack-likes-master-iframe.php';
23
include_once dirname( __FILE__ ) . '/likes/jetpack-likes-settings.php';
24
25
class Jetpack_Likes {
26
	public static function init() {
27
		static $instance = NULL;
28
29
		if ( ! $instance ) {
30
			$instance = new Jetpack_Likes;
31
		}
32
33
		return $instance;
34
	}
35
36
	function __construct() {
37
		$this->in_jetpack = ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ? false : true;
0 ignored issues
show
Bug introduced by
The property in_jetpack does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
38
		$this->settings = new Jetpack_Likes_Settings();
0 ignored issues
show
Bug introduced by
The property settings does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
39
40
		add_action( 'init', array( &$this, 'action_init' ) );
41
		add_action( 'admin_init', array( $this, 'admin_init' ) );
42
43
		if ( $this->in_jetpack ) {
44
			add_action( 'jetpack_activate_module_likes',   array( $this, 'set_social_notifications_like' ) );
45
			add_action( 'jetpack_deactivate_module_likes', array( $this, 'delete_social_notifications_like' ) );
46
47
			Jetpack::enable_module_configurable( __FILE__ );
48
			Jetpack::module_configuration_load( __FILE__, array( $this, 'configuration_redirect' ) );
49
50
			add_action( 'admin_print_scripts-settings_page_sharing', array( &$this, 'load_jp_css' ) );
51
			add_filter( 'sharing_show_buttons_on_row_start', array( $this, 'configuration_target_area' ) );
52
53
			$active = Jetpack::get_active_modules();
54
55 View Code Duplication
			if ( ! in_array( 'sharedaddy', $active ) && ! in_array( 'publicize', $active ) ) {
56
				// we don't have a sharing page yet
57
				add_action( 'admin_menu', array( $this->settings, 'sharing_menu' ) );
58
			}
59
60 View Code Duplication
			if ( in_array( 'publicize', $active ) && ! in_array( 'sharedaddy', $active ) ) {
61
				// we have a sharing page but not the global options area
62
				add_action( 'pre_admin_screen_sharing', array( $this->settings, 'sharing_block' ), 20 );
63
				add_action( 'pre_admin_screen_sharing', array( $this->settings, 'updated_message' ), -10 );
64
			}
65
66 View Code Duplication
			if( ! in_array( 'sharedaddy', $active ) ) {
67
				add_action( 'admin_init', array( $this->settings, 'process_update_requests_if_sharedaddy_not_loaded' ) );
68
				add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_showbuttonon_init' ), 19 );
69
				add_action( 'sharing_admin_update', array( $this->settings, 'admin_settings_showbuttonon_callback' ), 19 );
70
				add_action( 'admin_init', array( $this->settings, 'add_meta_box' ) );
71
			} else {
72
				add_filter( 'sharing_meta_box_title', array( $this->settings, 'add_likes_to_sharing_meta_box_title' ) );
73
				add_action( 'start_sharing_meta_box_content', array( $this->settings, 'meta_box_content' ) );
74
			}
75
		} else { // wpcom
76
			add_action( 'wpmu_new_blog', array( $this, 'enable_comment_likes' ), 10, 1 );
77
			add_action( 'admin_init', array( $this->settings, 'add_meta_box' ) );
78
			add_action( 'end_likes_meta_box_content', array( $this->settings, 'sharing_meta_box_content' ) );
79
			add_filter( 'likes_meta_box_title', array( $this->settings, 'add_likes_to_sharing_meta_box_title' ) );
80
		}
81
82
		add_action( 'admin_init', array( $this, 'admin_discussion_likes_settings_init' ) ); // Likes notifications
83
84
		add_action( 'admin_bar_menu', array( $this, 'admin_bar_likes' ), 60 );
85
86
		add_action( 'wp_enqueue_scripts', array( $this, 'load_styles_register_scripts' ) );
87
88
		add_action( 'save_post', array( $this->settings, 'meta_box_save' ) );
89
		add_action( 'edit_attachment', array( $this->settings, 'meta_box_save' ) );
90
		add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_init' ), 20 );
91
		add_action( 'sharing_admin_update',   array( $this->settings, 'admin_settings_callback' ), 20 );
92
	}
93
94
	/**
95
	 * Set the social_notifications_like option to `on` when the Likes module is activated.
96
	 *
97
	 * @since 3.7.0
98
	 *
99
	 * @return null
100
	 */
101
	function set_social_notifications_like() {
102
		update_option( 'social_notifications_like', 'on' );
103
	}
104
105
	/**
106
	 * Delete the social_notifications_like option that was set to `on` on module activation.
107
	 *
108
	 * @since 3.7.0
109
	 *
110
	 * @return null
111
	 */
112
	function delete_social_notifications_like() {
113
		delete_option( 'social_notifications_like' );
114
	}
115
116
	/**
117
	 * Redirects to the likes section of the sharing page.
118
	 */
119
	function configuration_redirect() {
120
		wp_safe_redirect( admin_url( 'options-general.php?page=sharing#likes' ) );
121
		die();
0 ignored issues
show
Coding Style Compatibility introduced by
The method configuration_redirect() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
122
	}
123
124
	/**
125
	 * Loads Jetpack's CSS on the sharing page so we can use .jetpack-targetable
126
	 */
127
	function load_jp_css() {
128
		// Do we really need `admin_styles`? With the new admin UI, it's breaking some bits.
129
		// Jetpack::init()->admin_styles();
130
	}
131
132
	/**
133
	 * Load scripts and styles for front end.
134
	 * @return null
135
	 */
136
	function load_styles_register_scripts() {
137
		if ( $this->in_jetpack ) {
138
			wp_enqueue_style( 'jetpack_likes', plugins_url( 'likes/style.css', __FILE__ ), array(), JETPACK__VERSION );
139
			$this->register_scripts();
140
		}
141
	}
142
143
144
	/**
145
     * Stub for is_post_likeable, since some wpcom functions call this directly on the class
146
	 * Are likes enabled for this post?
147
     *
148
     * @param int $post_id
149
     * @return bool
150
	 */
151
	static function is_post_likeable( $post_id = 0 ) {
152
		_deprecated_function( __METHOD__, 'jetpack-5.4', 'Jetpack_Likes_Settings()->is_post_likeable' );
153
        $settings = new Jetpack_Likes_Settings();
154
        return $settings->is_post_likeable();
155
	}
156
157
	/**
158
	 * Stub for is_likes_visible, since some themes were calling it directly from this class
159
	 *
160
	 * @deprecated 5.4
161
	 * @return bool
162
	 */
163
	function is_likes_visible() {
164
		_deprecated_function( __METHOD__, 'jetpack-5.4', 'Jetpack_Likes_Settings()->is_likes_visible' );
165
166
		$settings = new Jetpack_Likes_Settings();
167
		return $settings->is_likes_visible();
168
	}
169
170
	/**
171
	 * Adds in the jetpack-targetable class so when we visit sharing#likes our like settings get highlighted by a yellow box
172
	 * @param  string $html row heading for the sharedaddy "which page" setting
173
	 * @return string       html with the jetpack-targetable class and likes id. tbody gets closed after the like settings
174
	 */
175
	function configuration_target_area( $html = '' ) {
176
		$html = "<tbody id='likes' class='jetpack-targetable'>" . $html;
177
		return $html;
178
	}
179
180
	/**
181
	  * Options to be added to the discussion page (see also admin_settings_init, etc below for Sharing settings page)
182
	  */
183
184 View Code Duplication
	function admin_discussion_likes_settings_init() {
185
		// Add a temporary section, until we can move the setting out of there and with the rest of the email notification settings
186
		add_settings_section( 'likes-notifications', __( 'Likes Notifications', 'jetpack' ), array( $this, 'admin_discussion_likes_settings_section' ), 'discussion' );
187
		add_settings_field( 'social-notifications', __( 'Email me whenever', 'jetpack' ), array( $this, 'admin_discussion_likes_settings_field' ), 'discussion', 'likes-notifications' );
188
		// Register the setting
189
		register_setting( 'discussion', 'social_notifications_like', array( $this, 'admin_discussion_likes_settings_validate' ) );
190
	}
191
192
	function admin_discussion_likes_settings_section() {
193
		// Atypical usage here.  We emit jquery to move likes notification checkbox to be with the rest of the email notification settings
194
?>
195
	<script type="text/javascript">
196
	jQuery( function( $ )  {
197
		var table = $( '#social_notifications_like' ).parents( 'table:first' ),
198
			header = table.prevAll( 'h2:first' ),
199
			newParent = $( '#moderation_notify' ).parent( 'label' ).parent();
200
201
		if ( !table.length || !header.length || !newParent.length ) {
202
			return;
203
		}
204
205
		newParent.append( '<br/>' ).append( table.end().parent( 'label' ).siblings().andSelf() );
206
		header.remove();
207
		table.remove();
208
	} );
209
	</script>
210
<?php
211
	}
212
213
	function admin_likes_get_option( $option ) {
214
		if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
215
			$option_setting = get_blog_option( get_current_blog_id(), $option, 'on' );
216
		} else {
217
			$option_setting = get_option( $option, 'on' );
218
		}
219
220
		return intval( 'on' == $option_setting );
221
	}
222
223
	function admin_discussion_likes_settings_field() {
224
		$like = $this->admin_likes_get_option( 'social_notifications_like' );
225
?>
226
		<label><input type="checkbox" id="social_notifications_like" name="social_notifications_like" value="1" <?php checked( $like ); ?> /> <?php esc_html_e( 'Someone likes one of my posts', 'jetpack' ); ?></label>
227
<?php
228
	}
229
230
	function admin_discussion_likes_settings_validate( $input ) {
231
		// If it's not set (was unchecked during form submission) or was set to off (during option update), return 'off'.
232
		if ( !$input || 'off' == $input )
233
			return 'off';
234
235
		// Otherwise, return 'on'.
236
		return 'on';
237
	}
238
239
	function admin_init() {
240
		add_filter( 'manage_posts_columns', array( $this, 'add_like_count_column' ) );
241
		add_filter( 'manage_pages_columns', array( $this, 'add_like_count_column' ) );
242
		add_action( 'manage_posts_custom_column', array( $this, 'likes_edit_column' ), 10, 2 );
243
		add_action( 'manage_pages_custom_column', array( $this, 'likes_edit_column' ), 10, 2 );
244
		add_action( 'admin_print_styles-edit.php', array( $this, 'load_admin_css' ) );
245
		add_action( "admin_print_scripts-edit.php", array( $this, 'enqueue_admin_scripts' ) );
246
	}
247
248
	function action_init() {
249
		if ( is_admin() ) {
250
			return;
251
		}
252
253
		if ( ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) ||
254
			 ( defined( 'APP_REQUEST' ) && APP_REQUEST ) ||
255
			 ( defined( 'REST_API_REQUEST' ) && REST_API_REQUEST ) ||
256
			 ( defined( 'COOKIE_AUTH_REQUEST' ) && COOKIE_AUTH_REQUEST ) ||
257
			 ( defined( 'JABBER_SERVER' ) && JABBER_SERVER ) ) {
258
			return;
259
		}
260
261
		if ( $this->in_jetpack ) {
262
			add_filter( 'the_content', array( &$this, 'post_likes' ), 30, 1 );
263
			add_filter( 'the_excerpt', array( &$this, 'post_likes' ), 30, 1 );
264
265
		} else {
266
			add_filter( 'post_flair', array( &$this, 'post_likes' ), 30, 1 );
267
			add_filter( 'post_flair_block_css', array( $this, 'post_flair_service_enabled_like' ) );
268
269
			wp_enqueue_script( 'postmessage', '/wp-content/js/postmessage.js', array( 'jquery' ), JETPACK__VERSION, false );
270
			wp_enqueue_script( 'jetpack_resize', '/wp-content/js/jquery/jquery.jetpack-resize.js', array( 'jquery' ), JETPACK__VERSION, false );
271
			wp_enqueue_script( 'jetpack_likes_queuehandler', plugins_url( 'queuehandler.js' , __FILE__ ), array( 'jquery', 'postmessage', 'jetpack_resize' ), JETPACK__VERSION, true );
272
			wp_enqueue_style( 'jetpack_likes', plugins_url( 'jetpack-likes.css', __FILE__ ), array(), JETPACK__VERSION );
273
		}
274
	}
275
276
	/**
277
	* Register scripts
278
	*/
279
	function register_scripts() {
280
		wp_register_script(
281
			'postmessage',
282
			Jetpack::get_file_url_for_environment( '_inc/build/postmessage.min.js', '_inc/postmessage.js' ),
283
			array( 'jquery' ),
284
			JETPACK__VERSION,
285
			false
286
		);
287
		wp_register_script(
288
			'jetpack_resize',
289
			Jetpack::get_file_url_for_environment(
290
				'_inc/build/jquery.jetpack-resize.min.js',
291
				'_inc/jquery.jetpack-resize.js'
292
			),
293
			array( 'jquery' ),
294
			JETPACK__VERSION,
295
			false
296
		);
297
		wp_register_script(
298
			'jetpack_likes_queuehandler',
299
			Jetpack::get_file_url_for_environment(
300
				'_inc/build/likes/queuehandler.min.js',
301
				'modules/likes/queuehandler.js'
302
			),
303
			array( 'jquery', 'postmessage', 'jetpack_resize' ),
304
			JETPACK__VERSION,
305
			true
306
		);
307
	}
308
309
	/**
310
	* Load the CSS needed for the wp-admin area.
311
	*/
312
	function load_admin_css() {
313
	?>
314
		<style type="text/css">
315
			.vers img { display: none; }
316
			.metabox-prefs .vers img { display: inline; }
317
			.fixed .column-likes { width: 5.5em; padding: 8px 0; text-align: left; }
318
			.fixed .column-stats { width: 5em; }
319
			.fixed .column-likes .post-com-count {
320
				-webkit-box-sizing: border-box;
321
				-moz-box-sizing: border-box;
322
				box-sizing: border-box;
323
				display: inline-block;
324
				padding: 0 8px;
325
				height: 2em;
326
				margin-top: 5px;
327
				-webkit-border-radius: 5px;
328
				border-radius: 5px;
329
				background-color: #72777C;
330
				color: #FFF;
331
				font-size: 11px;
332
				line-height: 21px;
333
			}
334
			.fixed .column-likes .post-com-count::after { border: none !important; }
335
			.fixed .column-likes .post-com-count:hover { background-color: #0073AA; }
336
			.fixed .column-likes .vers:before {
337
				font: normal 20px/1 dashicons;
338
				content: '\f155';
339
				speak: none;
340
				-webkit-font-smoothing: antialiased;
341
				-moz-osx-font-smoothing: grayscale;
342
			}
343
			@media screen and (max-width: 782px) {
344
				.fixed .column-likes {
345
					display: none;
346
				}
347
			}
348
		</style>
349
		<?php
350
	}
351
352
	/**
353
	* Load the JS required for loading the like counts.
354
	*/
355
	function enqueue_admin_scripts() {
356
		if ( empty( $_GET['post_type'] ) || 'post' == $_GET['post_type'] || 'page' == $_GET['post_type'] ) {
357
			if ( $this->in_jetpack ) {
358
				wp_enqueue_script(
359
					'likes-post-count',
360
					Jetpack::get_file_url_for_environment(
361
						'_inc/build/likes/post-count.min.js',
362
						'modules/likes/post-count.js'
363
					),
364
					array( 'jquery' ),
365
					JETPACK__VERSION
366
				);
367
				wp_enqueue_script(
368
					'likes-post-count-jetpack',
369
					Jetpack::get_file_url_for_environment(
370
						'_inc/build/likes/post-count-jetpack.min.js',
371
						'modules/likes/post-count-jetpack.js'
372
					),
373
					array( 'likes-post-count' ),
374
					JETPACK__VERSION
375
				);
376
			} else {
377
				wp_enqueue_script( 'jquery.wpcom-proxy-request', "/wp-content/js/jquery/jquery.wpcom-proxy-request.js", array('jquery'), NULL, true );
378
				wp_enqueue_script( 'likes-post-count', plugins_url( 'likes/post-count.js', dirname( __FILE__ ) ), array( 'jquery' ), JETPACK__VERSION );
379
				wp_enqueue_script( 'likes-post-count-wpcom', plugins_url( 'likes/post-count-wpcom.js', dirname( __FILE__ ) ), array( 'likes-post-count', 'jquery.wpcom-proxy-request' ), JETPACK__VERSION );
380
			}
381
		}
382
	}
383
384
	/**
385
	* Add "Likes" column data to the post edit table in wp-admin.
386
	*
387
	* @param string $column_name
388
	* @param int $post_id
389
	*/
390
	function likes_edit_column( $column_name, $post_id ) {
391
		if ( 'likes' == $column_name ) {
392
393
			if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
394
				$blog_id = get_current_blog_id();
395
			} else {
396
				$blog_id = Jetpack_Options::get_option( 'id' );
397
			}
398
399
			$permalink = get_permalink( get_the_ID() ); ?>
400
			<a title="" data-post-id="<?php echo (int) $post_id; ?>" class="post-com-count post-like-count" id="post-like-count-<?php echo (int) $post_id; ?>" data-blog-id="<?php echo (int) $blog_id; ?>" href="<?php echo esc_url( $permalink ); ?>#like-<?php echo (int) $post_id; ?>">
401
				<span class="comment-count">0</span>
402
			</a>
403
			<?php
404
		}
405
	}
406
407
	/**
408
	* Add a "Likes" column header to the post edit table in wp-admin.
409
	*
410
	* @param array $columns
411
	* @return array
412
	*/
413
	function add_like_count_column( $columns ) {
414
		$date = $columns['date'];
415
		unset( $columns['date'] );
416
417
		$columns['likes'] = '<span class="vers"><img title="' . esc_attr__( 'Likes', 'jetpack' ) . '" alt="' . esc_attr__( 'Likes', 'jetpack' ) . '" src="//s0.wordpress.com/i/like-grey-icon.png" /></span>';
418
		$columns['date'] = $date;
419
420
		return $columns;
421
	}
422
423
	function post_likes( $content ) {
424
		$post_id = get_the_ID();
425
426
		if ( ! is_numeric( $post_id ) || ! $this->settings->is_likes_visible() )
427
			return $content;
428
429 View Code Duplication
		if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
430
			$blog_id = get_current_blog_id();
431
			$bloginfo = get_blog_details( (int) $blog_id );
432
			$domain = $bloginfo->domain;
433
		} else {
434
			$blog_id = Jetpack_Options::get_option( 'id' );
435
			$url = home_url();
436
			$url_parts = parse_url( $url );
437
			$domain = $url_parts['host'];
438
		}
439
		// make sure to include the scripts before the iframe otherwise weird things happen
440
		add_action( 'wp_footer', 'jetpack_likes_master_iframe', 21 );
441
442
		/**
443
		* if the same post appears more then once on a page the page goes crazy
444
		* we need a slightly more unique id / name for the widget wrapper.
445
		*/
446
		$uniqid = uniqid();
447
448
		$src = sprintf( 'https://widgets.wp.com/likes/#blog_id=%1$d&amp;post_id=%2$d&amp;origin=%3$s&amp;obj_id=%1$d-%2$d-%4$s', $blog_id, $post_id, $domain, $uniqid );
449
		$name = sprintf( 'like-post-frame-%1$d-%2$d-%3$s', $blog_id, $post_id, $uniqid );
450
		$wrapper = sprintf( 'like-post-wrapper-%1$d-%2$d-%3$s', $blog_id, $post_id, $uniqid );
451
		$headline = sprintf(
452
			/** This filter is already documented in modules/sharedaddy/sharing-service.php */
453
			apply_filters( 'jetpack_sharing_headline_html', '<h3 class="sd-title">%s</h3>', esc_html__( 'Like this:', 'jetpack' ), 'likes' ),
454
			esc_html__( 'Like this:', 'jetpack' )
455
		);
456
457
		$html  = "<div class='sharedaddy sd-block sd-like jetpack-likes-widget-wrapper jetpack-likes-widget-unloaded' id='$wrapper' data-src='$src' data-name='$name'>";
458
		$html .= $headline;
459
		$html .= "<div class='likes-widget-placeholder post-likes-widget-placeholder' style='height: 55px;'><span class='button'><span>" . esc_html__( 'Like', 'jetpack' ) . '</span></span> <span class="loading">' . esc_html__( 'Loading...', 'jetpack' ) . '</span></div>';
460
		$html .= "<span class='sd-text-color'></span><a class='sd-link-color'></a>";
461
		$html .= '</div>';
462
463
		// Let's make sure that the script is enqueued
464
		wp_enqueue_script( 'jetpack_likes_queuehandler' );
465
466
		return $content . $html;
467
	}
468
469
	function post_flair_service_enabled_like( $classes ) {
470
		$classes[] = 'sd-like-enabled';
471
		return $classes;
472
	}
473
474
	function is_admin_bar_button_visible() {
475
		global $wp_admin_bar;
476
477
		if ( ! is_object( $wp_admin_bar ) )
478
			return false;
479
480
		if ( ( ! is_singular( 'post' ) && ! is_attachment() && ! is_page() ) )
481
			return false;
482
483
		if ( ! $this->settings->is_likes_visible() )
484
			return false;
485
486
		if ( ! $this->settings->is_post_likeable() )
487
			return false;
488
489
		/**
490
		 * Filters whether the Like button is enabled in the admin bar.
491
		 *
492
		 * @module likes
493
		 *
494
		 * @since 2.2.0
495
		 *
496
		 * @param bool true Should the Like button be visible in the Admin bar. Default to true.
497
		 */
498
		return (bool) apply_filters( 'jetpack_admin_bar_likes_enabled', true );
499
	}
500
501
	function admin_bar_likes() {
502
		global $wp_admin_bar;
503
504
		$post_id = get_the_ID();
505
506
		if ( ! is_numeric( $post_id ) || ! $this->is_admin_bar_button_visible() ) {
507
			return;
508
		}
509
510
		$protocol = 'http';
511
		if ( is_ssl() )
512
			$protocol = 'https';
513
514 View Code Duplication
		if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
515
			$blog_id = get_current_blog_id();
516
			$bloginfo = get_blog_details( (int) $blog_id );
517
			$domain = $bloginfo->domain;
518
		} else {
519
			$blog_id = Jetpack_Options::get_option( 'id' );
520
			$url = home_url();
521
			$url_parts = parse_url( $url );
522
			$domain = $url_parts['host'];
523
		}
524
		// make sure to include the scripts before the iframe otherwise weird things happen
525
		add_action( 'wp_footer', 'jetpack_likes_master_iframe', 21 );
526
527
		$src = sprintf( 'https://widgets.wp.com/likes/#blog_id=%2$d&amp;post_id=%3$d&amp;origin=%1$s://%4$s', $protocol, $blog_id, $post_id, $domain );
528
529
		$html = "<iframe class='admin-bar-likes-widget jetpack-likes-widget' scrolling='no' frameBorder='0' name='admin-bar-likes-widget' src='$src'></iframe>";
530
531
		$node = array(
532
				'id'   => 'admin-bar-likes-widget',
533
				'meta' => array(
534
							'html' => $html
535
				)
536
		);
537
538
		$wp_admin_bar->add_node( $node );
539
	}
540
}
541
542
Jetpack_Likes::init();
543