PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / trunk
Jetpack – WP Security, Backup, Speed, & Growth vtrunk
16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 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 5 months ago carousel 3 weeks ago comment-likes 9 months ago comments 6 days ago custom-post-types 2 months ago external-media 9 months ago google-fonts 2 months ago gravatar 6 years ago infinite-scroll 2 months ago likes 1 week ago markdown 3 months ago memberships 2 weeks ago photon-cdn 1 month ago plugin-search 3 months ago post-by-email 9 months ago related-posts 1 month ago scan 5 months ago seo-tools 1 week ago sharedaddy 1 week ago shortcodes 1 month ago shortlinks 2 months ago simple-payments 9 months ago site-icon 9 months ago sitemaps 1 week ago stats 8 months ago subscriptions 1 month ago theme-tools 3 weeks ago tiled-gallery 2 months ago verification-tools 3 months ago videopress 1 month ago widget-visibility 3 months ago widgets 2 weeks ago woocommerce-analytics 4 months ago wordads 2 months ago wpcom-tos 8 months ago account-protection.php 4 months ago ai.php 6 days ago blaze.php 9 months ago blocks.php 9 months ago canonical-urls.php 6 months ago carousel.php 9 months ago comment-likes.php 1 week ago comments.php 6 days ago contact-form.php 9 months ago copy-post.php 3 months ago custom-content-types.php 4 months ago google-fonts.php 4 months ago gravatar-hovercards.php 3 months ago infinite-scroll.php 9 months ago json-api.php 9 months ago latex.php 3 months ago likes.php 1 week ago markdown.php 9 months ago module-extras.php 3 weeks ago module-headings.php 6 days ago module-info.php 6 months ago monitor.php 2 months ago notes.php 1 month ago photon-cdn.php 9 months ago photon.php 9 months ago plugin-search.php 3 weeks ago podcast.php 1 month ago post-by-email.php 4 months ago post-list.php 9 months ago protect.php 4 months ago publicize.php 9 months ago related-posts.php 3 months ago search.php 9 months ago seo-tools.php 2 months ago sharedaddy.php 6 months ago shortcodes.php 9 months ago shortlinks.php 3 months ago simple-payments.php 9 months ago sitemaps.php 9 months ago sso.php 2 months ago stats.php 1 month ago subscriptions.php 1 month ago theme-tools.php 9 months ago tiled-gallery.php 9 months ago vaultpress.php 9 months ago verification-tools.php 4 months ago videopress.php 9 months ago waf.php 9 months ago widget-visibility.php 9 months ago widgets.php 9 months ago woocommerce-analytics.php 9 months ago wordads.php 9 months ago wpcom-reader.php 6 months ago wpgroho.js 1 year ago
comment-likes.php
268 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 $sharedaddy_active = in_array( 'sharedaddy', $active, true );
86
87 if ( $this->settings->needs_own_sharing_menu( $sharedaddy_active ) ) {
88 /*
89 * Sharedaddy is what registers Settings > Sharing, and it is off, so we
90 * register that screen ourselves; the Likes settings that gate comment
91 * likes are displayed on it.
92 */
93 add_action( 'admin_menu', array( $this->settings, 'sharing_menu' ) );
94 } elseif ( in_array( 'publicize', $active, true ) && ! $sharedaddy_active ) {
95 // we have a sharing page but not the global options area.
96 add_action( 'pre_admin_screen_sharing', array( $this->settings, 'sharing_block' ), 20 );
97 add_action( 'pre_admin_screen_sharing', array( $this->settings, 'updated_message' ), -10 );
98 }
99
100 if ( ! $sharedaddy_active ) {
101 add_action( 'admin_init', array( $this->settings, 'process_update_requests_if_sharedaddy_not_loaded' ) );
102 add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_showbuttonon_init' ), 19 );
103 add_action( 'sharing_admin_update', array( $this->settings, 'admin_settings_showbuttonon_callback' ), 19 );
104 add_action( 'admin_init', array( $this->settings, 'add_meta_box' ) );
105 } else {
106 add_filter( 'sharing_meta_box_title', array( $this->settings, 'add_likes_to_sharing_meta_box_title' ) );
107 add_action( 'start_sharing_meta_box_content', array( $this->settings, 'meta_box_content' ) );
108 }
109
110 add_action( 'save_post', array( $this->settings, 'meta_box_save' ) );
111 add_action( 'edit_attachment', array( $this->settings, 'meta_box_save' ) );
112 add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_init' ), 20 );
113 add_action( 'sharing_admin_update', array( $this->settings, 'admin_settings_callback' ), 20 );
114 }
115 }
116
117 /**
118 * Initialize admin section
119 */
120 public function admin_init() {
121 add_filter( 'manage_edit-comments_columns', array( $this, 'add_like_count_column' ) );
122 add_action( 'manage_comments_custom_column', array( $this, 'comment_likes_edit_column' ), 10, 2 );
123 add_action( 'admin_print_styles-edit-comments.php', array( $this, 'enqueue_admin_styles_scripts' ) );
124 }
125
126 /**
127 * Displays number of comment likes in comment admin page.
128 *
129 * @param string $column_name name of the column.
130 * @param int $comment_id ID of the comment.
131 */
132 public function comment_likes_edit_column( $column_name, $comment_id ) {
133 if ( 'comment_likes' !== $column_name ) {
134 return;
135 }
136
137 $permalink = get_permalink( get_the_ID() );
138 ?>
139 <a
140 data-comment-id="<?php echo absint( $comment_id ); ?>"
141 data-blog-id="<?php echo absint( $this->blog_id ); ?>"
142 class="comment-like-count"
143 id="comment-like-count-<?php echo absint( $comment_id ); ?>"
144 href="<?php echo esc_url( $permalink ); ?>#comment-<?php echo absint( $comment_id ); ?>"
145 >
146 <span class="like-count">0</span>
147 </a>
148 <?php
149 }
150
151 /**
152 * Enqueue admin style scripts.
153 */
154 public function enqueue_admin_styles_scripts() {
155 wp_enqueue_style( 'comment-like-count', plugins_url( 'comment-likes/admin-style.css', __FILE__ ), array(), JETPACK__VERSION );
156 wp_enqueue_script(
157 'comment-like-count',
158 Assets::get_file_url_for_environment(
159 '_inc/build/comment-likes/comment-like-count.min.js',
160 'modules/comment-likes/comment-like-count.js'
161 ),
162 array( 'jquery' ),
163 JETPACK__VERSION,
164 false
165 );
166 }
167
168 /**
169 * Adds like count column to admin page.
170 *
171 * @param array $columns column of admin table.
172 */
173 public function add_like_count_column( $columns ) {
174 $columns['comment_likes'] = '<span class="vers"></span>';
175 return $columns;
176 }
177
178 /**
179 * Initialize front end
180 */
181 public function frontend_init() {
182 if ( class_exists( Jetpack_AMP_Support::class ) && Jetpack_AMP_Support::is_amp_request() ) {
183 return;
184 }
185
186 add_action( 'wp_enqueue_scripts', array( $this, 'load_styles_register_scripts' ) );
187 add_filter( 'comment_text', array( $this, 'comment_likes' ), 10, 2 );
188 }
189
190 /**
191 * Load styling scripts
192 */
193 public function load_styles_register_scripts() {
194 if ( ! $this->settings->is_likes_visible() ) {
195 return;
196 }
197
198 if ( ! wp_style_is( 'open-sans', 'registered' ) ) {
199 wp_register_style( 'open-sans', 'https://fonts.googleapis.com/css?family=Open+Sans', array(), JETPACK__VERSION );
200 }
201 wp_enqueue_style( 'jetpack_likes', plugins_url( 'likes/style.css', __FILE__ ), array( 'open-sans' ), JETPACK__VERSION );
202 wp_enqueue_script( 'jetpack_likes_queuehandler', plugins_url( 'likes/queuehandler.js', __FILE__ ), array(), JETPACK__VERSION, true );
203 }
204
205 /**
206 * Display like count.
207 *
208 * @param string $content text content of the comment itself.
209 * @param object $comment comment object containing comment data.
210 */
211 public function comment_likes( $content, $comment = null ) {
212 if ( empty( $comment ) ) {
213 return $content;
214 }
215
216 if ( ! $this->settings->is_likes_visible() ) {
217 return $content;
218 }
219
220 $comment_id = get_comment_ID();
221 if ( empty( $comment_id ) && ! empty( $comment->comment_ID ) ) {
222 $comment_id = $comment->comment_ID;
223 }
224
225 if ( empty( $content ) || empty( $comment_id ) ) {
226 return $content;
227 }
228
229 if ( empty( $comment->comment_approved ) ) {
230 return $content;
231 }
232
233 // In case master iframe hasn't been loaded. This could be the case when Post Likes module is disabled,
234 // or on pages on which we have comments but post likes are disabled.
235 if ( false === has_action( 'wp_footer', 'jetpack_likes_master_iframe' ) ) {
236 add_action( 'wp_footer', 'jetpack_likes_master_iframe', 21 );
237 }
238
239 $uniqid = uniqid();
240
241 $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 );
242 $name = sprintf( 'like-comment-frame-%1$d-%2$d-%3$s', $this->blog_id, $comment_id, $uniqid );
243 $wrapper = sprintf( 'like-comment-wrapper-%1$d-%2$d-%3$s', $this->blog_id, $comment_id, $uniqid );
244
245 $html = '';
246 $html .= "<div class='jetpack-comment-likes-widget-wrapper jetpack-likes-widget-unloaded' id='$wrapper' data-src='$src' data-name='$name'>";
247 $html .= "<div class='likes-widget-placeholder comment-likes-widget-placeholder comment-likes'><span class='loading'>" . esc_html__( 'Loading...', 'jetpack' ) . '</span></div>';
248 $html .= "<div class='comment-likes-widget jetpack-likes-widget comment-likes'><span class='comment-like-feedback'></span>";
249 $html .= "<span class='sd-text-color'></span><a class='sd-link-color'></a>";
250 $html .= '</div></div>';
251
252 /**
253 * Filters the Comment Likes button content.
254 *
255 * @module comment-likes
256 *
257 * @since 5.1.0
258 *
259 * @param string $html Comment Likes button content.
260 */
261 $like_button = apply_filters( 'comment_like_button', $html );
262
263 return $content . $like_button;
264 }
265 }
266
267 Jetpack_Comment_Likes::init();
268