PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 15.9.1
Jetpack – WP Security, Backup, Speed, & Growth v15.9.1
16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / comment-likes.php
jetpack / modules Last commit date
canonical-urls 3 months ago carousel 3 weeks ago comment-likes 7 months ago comments 1 month ago custom-post-types 1 week ago external-media 7 months ago google-fonts 1 week ago gravatar 6 years ago infinite-scroll 1 week ago likes 1 week ago markdown 1 month ago memberships 1 week ago photon-cdn 1 week ago plugin-search 1 month ago post-by-email 7 months ago related-posts 4 weeks ago scan 3 months ago seo-tools 1 week ago sharedaddy 3 weeks ago shortcodes 1 week ago shortlinks 1 month ago simple-payments 7 months ago site-icon 7 months ago sitemaps 1 month ago stats 6 months ago subscriptions 1 week ago theme-tools 1 week ago tiled-gallery 3 weeks ago verification-tools 1 month ago videopress 1 week ago widget-visibility 1 month ago widgets 1 week ago woocommerce-analytics 2 months ago wordads 1 week ago wpcom-tos 6 months ago account-protection.php 2 months ago blaze.php 7 months ago blocks.php 7 months ago canonical-urls.php 4 months ago carousel.php 7 months ago comment-likes.php 7 months ago comments.php 3 months ago contact-form.php 7 months ago copy-post.php 1 month ago custom-content-types.php 2 months ago google-fonts.php 2 months ago gravatar-hovercards.php 1 month ago infinite-scroll.php 7 months ago json-api.php 7 months ago latex.php 1 month ago likes.php 1 month ago markdown.php 7 months ago module-extras.php 7 months ago module-headings.php 1 week ago module-info.php 4 months ago monitor.php 4 weeks ago notes.php 1 week ago photon-cdn.php 7 months ago photon.php 7 months ago plugin-search.php 1 week ago post-by-email.php 2 months ago post-list.php 7 months ago protect.php 2 months ago publicize.php 7 months ago related-posts.php 1 month ago search.php 7 months ago seo-tools.php 1 week ago sharedaddy.php 4 months ago shortcodes.php 7 months ago shortlinks.php 1 month ago simple-payments.php 7 months ago sitemaps.php 7 months ago sso.php 1 week ago stats.php 1 month ago subscriptions.php 1 week ago theme-tools.php 7 months ago tiled-gallery.php 7 months ago vaultpress.php 7 months ago verification-tools.php 2 months ago videopress.php 7 months ago waf.php 7 months ago widget-visibility.php 7 months ago widgets.php 7 months ago woocommerce-analytics.php 7 months ago wordads.php 7 months ago wpcom-reader.php 4 months ago wpgroho.js 1 year ago
comment-likes.php
260 lines
1 <?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 /**
3 * Module Name: Comment Likes
4 * Module Description: Enable visitors to like individual comments and boost engagement.
5 * Sort Order: 39
6 * Recommendation Order: 17
7 * First Introduced: 5.1
8 * Requires Connection: Yes
9 * Auto Activate: No
10 * Module Tags: Social
11 * Additional Search Queries: like widget, like button, like, likes
12 *
13 * @package automattic/jetpack
14 */
15
16 use Automattic\Jetpack\Assets;
17
18 if ( ! defined( 'ABSPATH' ) ) {
19 exit( 0 );
20 }
21
22 Assets::add_resource_hint( '//widgets.wp.com', 'dns-prefetch' );
23
24 require_once __DIR__ . '/likes/jetpack-likes-master-iframe.php';
25 require_once __DIR__ . '/likes/jetpack-likes-settings.php';
26
27 /**
28 * Jetpack Comment Like Class
29 */
30 class Jetpack_Comment_Likes {
31
32 /**
33 * Jetpack_Likes_Settings object
34 *
35 * @var Jetpack_Likes_Settings
36 */
37 public $settings;
38
39 /**
40 * Blog ID
41 *
42 * @var int
43 */
44 public $blog_id;
45
46 /**
47 * Site home URL domain
48 *
49 * @var string
50 */
51 public $domain;
52
53 /**
54 * Initialize comment like module
55 */
56 public static function init() {
57 static $instance = null;
58
59 if ( ! $instance ) {
60 $instance = new Jetpack_Comment_Likes();
61 }
62
63 return $instance;
64 }
65
66 /**
67 * Construct comment like module.
68 */
69 private function __construct() {
70 $this->settings = new Jetpack_Likes_Settings();
71 $this->blog_id = Jetpack_Options::get_option( 'id' );
72 $url_parts = wp_parse_url( home_url() );
73
74 // Abort if domain can't be determined.
75 if ( ! $url_parts || ! isset( $url_parts['host'] ) ) {
76 return;
77 }
78 $this->domain = $url_parts['host'];
79
80 add_action( 'template_redirect', array( $this, 'frontend_init' ) );
81 add_action( 'admin_init', array( $this, 'admin_init' ) );
82
83 if ( ! Jetpack::is_module_active( 'likes' ) ) {
84 $active = Jetpack::get_active_modules();
85
86 if ( in_array( 'publicize', $active, true ) && ! in_array( 'sharedaddy', $active, true ) ) {
87 // we have a sharing page but not the global options area.
88 add_action( 'pre_admin_screen_sharing', array( $this->settings, 'sharing_block' ), 20 );
89 add_action( 'pre_admin_screen_sharing', array( $this->settings, 'updated_message' ), -10 );
90 }
91
92 if ( ! in_array( 'sharedaddy', $active, true ) ) {
93 add_action( 'admin_init', array( $this->settings, 'process_update_requests_if_sharedaddy_not_loaded' ) );
94 add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_showbuttonon_init' ), 19 );
95 add_action( 'sharing_admin_update', array( $this->settings, 'admin_settings_showbuttonon_callback' ), 19 );
96 add_action( 'admin_init', array( $this->settings, 'add_meta_box' ) );
97 } else {
98 add_filter( 'sharing_meta_box_title', array( $this->settings, 'add_likes_to_sharing_meta_box_title' ) );
99 add_action( 'start_sharing_meta_box_content', array( $this->settings, 'meta_box_content' ) );
100 }
101
102 add_action( 'save_post', array( $this->settings, 'meta_box_save' ) );
103 add_action( 'edit_attachment', array( $this->settings, 'meta_box_save' ) );
104 add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_init' ), 20 );
105 add_action( 'sharing_admin_update', array( $this->settings, 'admin_settings_callback' ), 20 );
106 }
107 }
108
109 /**
110 * Initialize admin section
111 */
112 public function admin_init() {
113 add_filter( 'manage_edit-comments_columns', array( $this, 'add_like_count_column' ) );
114 add_action( 'manage_comments_custom_column', array( $this, 'comment_likes_edit_column' ), 10, 2 );
115 add_action( 'admin_print_styles-edit-comments.php', array( $this, 'enqueue_admin_styles_scripts' ) );
116 }
117
118 /**
119 * Displays number of comment likes in comment admin page.
120 *
121 * @param string $column_name name of the column.
122 * @param int $comment_id ID of the comment.
123 */
124 public function comment_likes_edit_column( $column_name, $comment_id ) {
125 if ( 'comment_likes' !== $column_name ) {
126 return;
127 }
128
129 $permalink = get_permalink( get_the_ID() );
130 ?>
131 <a
132 data-comment-id="<?php echo absint( $comment_id ); ?>"
133 data-blog-id="<?php echo absint( $this->blog_id ); ?>"
134 class="comment-like-count"
135 id="comment-like-count-<?php echo absint( $comment_id ); ?>"
136 href="<?php echo esc_url( $permalink ); ?>#comment-<?php echo absint( $comment_id ); ?>"
137 >
138 <span class="like-count">0</span>
139 </a>
140 <?php
141 }
142
143 /**
144 * Enqueue admin style scripts.
145 */
146 public function enqueue_admin_styles_scripts() {
147 wp_enqueue_style( 'comment-like-count', plugins_url( 'comment-likes/admin-style.css', __FILE__ ), array(), JETPACK__VERSION );
148 wp_enqueue_script(
149 'comment-like-count',
150 Assets::get_file_url_for_environment(
151 '_inc/build/comment-likes/comment-like-count.min.js',
152 'modules/comment-likes/comment-like-count.js'
153 ),
154 array( 'jquery' ),
155 JETPACK__VERSION,
156 false
157 );
158 }
159
160 /**
161 * Adds like count column to admin page.
162 *
163 * @param array $columns column of admin table.
164 */
165 public function add_like_count_column( $columns ) {
166 $columns['comment_likes'] = '<span class="vers"></span>';
167 return $columns;
168 }
169
170 /**
171 * Initialize front end
172 */
173 public function frontend_init() {
174 if ( class_exists( Jetpack_AMP_Support::class ) && Jetpack_AMP_Support::is_amp_request() ) {
175 return;
176 }
177
178 add_action( 'wp_enqueue_scripts', array( $this, 'load_styles_register_scripts' ) );
179 add_filter( 'comment_text', array( $this, 'comment_likes' ), 10, 2 );
180 }
181
182 /**
183 * Load styling scripts
184 */
185 public function load_styles_register_scripts() {
186 if ( ! $this->settings->is_likes_visible() ) {
187 return;
188 }
189
190 if ( ! wp_style_is( 'open-sans', 'registered' ) ) {
191 wp_register_style( 'open-sans', 'https://fonts.googleapis.com/css?family=Open+Sans', array(), JETPACK__VERSION );
192 }
193 wp_enqueue_style( 'jetpack_likes', plugins_url( 'likes/style.css', __FILE__ ), array( 'open-sans' ), JETPACK__VERSION );
194 wp_enqueue_script( 'jetpack_likes_queuehandler', plugins_url( 'likes/queuehandler.js', __FILE__ ), array(), JETPACK__VERSION, true );
195 }
196
197 /**
198 * Display like count.
199 *
200 * @param string $content text content of the comment itself.
201 * @param object $comment comment object containing comment data.
202 */
203 public function comment_likes( $content, $comment = null ) {
204 if ( empty( $comment ) ) {
205 return $content;
206 }
207
208 if ( ! $this->settings->is_likes_visible() ) {
209 return $content;
210 }
211
212 $comment_id = get_comment_ID();
213 if ( empty( $comment_id ) && ! empty( $comment->comment_ID ) ) {
214 $comment_id = $comment->comment_ID;
215 }
216
217 if ( empty( $content ) || empty( $comment_id ) ) {
218 return $content;
219 }
220
221 if ( empty( $comment->comment_approved ) ) {
222 return $content;
223 }
224
225 // In case master iframe hasn't been loaded. This could be the case when Post Likes module is disabled,
226 // or on pages on which we have comments but post likes are disabled.
227 if ( false === has_action( 'wp_footer', 'jetpack_likes_master_iframe' ) ) {
228 add_action( 'wp_footer', 'jetpack_likes_master_iframe', 21 );
229 }
230
231 $uniqid = uniqid();
232
233 $src = sprintf( 'https://widgets.wp.com/likes/#blog_id=%1$d&amp;comment_id=%2$d&amp;origin=%3$s&amp;obj_id=%1$d-%2$d-%4$s', $this->blog_id, $comment_id, $this->domain, $uniqid );
234 $name = sprintf( 'like-comment-frame-%1$d-%2$d-%3$s', $this->blog_id, $comment_id, $uniqid );
235 $wrapper = sprintf( 'like-comment-wrapper-%1$d-%2$d-%3$s', $this->blog_id, $comment_id, $uniqid );
236
237 $html = '';
238 $html .= "<div class='jetpack-comment-likes-widget-wrapper jetpack-likes-widget-unloaded' id='$wrapper' data-src='$src' data-name='$name'>";
239 $html .= "<div class='likes-widget-placeholder comment-likes-widget-placeholder comment-likes'><span class='loading'>" . esc_html__( 'Loading...', 'jetpack' ) . '</span></div>';
240 $html .= "<div class='comment-likes-widget jetpack-likes-widget comment-likes'><span class='comment-like-feedback'></span>";
241 $html .= "<span class='sd-text-color'></span><a class='sd-link-color'></a>";
242 $html .= '</div></div>';
243
244 /**
245 * Filters the Comment Likes button content.
246 *
247 * @module comment-likes
248 *
249 * @since 5.1.0
250 *
251 * @param string $html Comment Likes button content.
252 */
253 $like_button = apply_filters( 'comment_like_button', $html );
254
255 return $content . $like_button;
256 }
257 }
258
259 Jetpack_Comment_Likes::init();
260