PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.9.2
Jetpack – WP Security, Backup, Speed, & Growth v13.9.2
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 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
carousel 2 years ago cloudflare-analytics 2 years ago comment-likes 5 years ago comments 2 years ago custom-post-types 1 year ago geo-location 4 years ago google-fonts 2 years ago gravatar 6 years ago infinite-scroll 2 years ago likes 2 years ago markdown 2 years ago memberships 1 year ago photon-cdn 1 year ago plugin-search 2 years ago post-by-email 3 years ago related-posts 2 years ago scan 1 year ago seo-tools 2 years ago sharedaddy 2 years ago shortcodes 1 year ago simple-payments 3 years ago site-icon 2 years ago sitemaps 2 years ago stats 2 years ago subscriptions 1 year ago theme-tools 1 year ago tiled-gallery 2 years ago verification-tools 4 years ago videopress 2 years ago widget-visibility 2 years ago widgets 2 years ago woocommerce-analytics 2 years ago wordads 2 years ago wpcom-tos 5 years ago blaze.php 2 years ago blocks.php 1 year ago carousel.php 2 years ago comment-likes.php 2 years ago comments.php 2 years ago contact-form.php 2 years ago copy-post.php 2 years ago custom-content-types.php 1 year ago geo-location.php 4 years ago google-fonts.php 2 years ago gravatar-hovercards.php 2 years ago infinite-scroll.php 3 years ago json-api.php 5 years ago latex.php 4 years ago likes.php 2 years ago markdown.php 4 years ago masterbar.php 1 year ago module-extras.php 2 years ago module-headings.php 1 year ago module-info.php 1 year ago monitor.php 2 years ago notes.php 1 year ago photon-cdn.php 2 years ago photon.php 3 years ago plugin-search.php 2 years ago post-by-email.php 5 years ago post-list.php 4 years ago protect.php 2 years ago publicize.php 2 years ago related-posts.php 2 years ago search.php 4 years ago seo-tools.php 2 years ago sharedaddy.php 2 years ago shortcodes.php 2 years ago shortlinks.php 2 years ago sitemaps.php 4 years ago sso.php 1 year ago stats.php 1 year ago subscriptions.php 2 years ago theme-tools.php 3 years ago tiled-gallery.php 4 years ago vaultpress.php 2 years ago verification-tools.php 5 years ago videopress.php 4 years ago waf.php 3 years ago widget-visibility.php 4 years ago widgets.php 3 years ago woocommerce-analytics.php 2 years ago wordads.php 2 years ago wpgroho.js 2 years ago
comment-likes.php
251 lines
1 <?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 /**
3 * Module Name: Comment Likes
4 * Module Description: Increase visitor engagement by adding a Like button to comments.
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 Assets::add_resource_hint( '//widgets.wp.com', 'dns-prefetch' );
19
20 require_once __DIR__ . '/likes/jetpack-likes-master-iframe.php';
21 require_once __DIR__ . '/likes/jetpack-likes-settings.php';
22
23 /**
24 * Jetpack Comment Like Class
25 */
26 class Jetpack_Comment_Likes {
27
28 /**
29 * Jetpack_Likes_Settings object
30 *
31 * @var Jetpack_Likes_Settings
32 */
33 public $settings;
34
35 /**
36 * Blog ID
37 *
38 * @var int
39 */
40 public $blog_id;
41
42 /**
43 * Site home URL domain
44 *
45 * @var string
46 */
47 public $domain;
48
49 /**
50 * Initialize comment like module
51 */
52 public static function init() {
53 static $instance = null;
54
55 if ( ! $instance ) {
56 $instance = new Jetpack_Comment_Likes();
57 }
58
59 return $instance;
60 }
61
62 /**
63 * Construct comment like module.
64 */
65 private function __construct() {
66 $this->settings = new Jetpack_Likes_Settings();
67 $this->blog_id = Jetpack_Options::get_option( 'id' );
68 $url_parts = wp_parse_url( home_url() );
69 $this->domain = $url_parts['host'];
70
71 add_action( 'template_redirect', array( $this, 'frontend_init' ) );
72 add_action( 'admin_init', array( $this, 'admin_init' ) );
73
74 if ( ! Jetpack::is_module_active( 'likes' ) ) {
75 $active = Jetpack::get_active_modules();
76
77 if ( in_array( 'publicize', $active, true ) && ! in_array( 'sharedaddy', $active, true ) ) {
78 // we have a sharing page but not the global options area.
79 add_action( 'pre_admin_screen_sharing', array( $this->settings, 'sharing_block' ), 20 );
80 add_action( 'pre_admin_screen_sharing', array( $this->settings, 'updated_message' ), -10 );
81 }
82
83 if ( ! in_array( 'sharedaddy', $active, true ) ) {
84 add_action( 'admin_init', array( $this->settings, 'process_update_requests_if_sharedaddy_not_loaded' ) );
85 add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_showbuttonon_init' ), 19 );
86 add_action( 'sharing_admin_update', array( $this->settings, 'admin_settings_showbuttonon_callback' ), 19 );
87 add_action( 'admin_init', array( $this->settings, 'add_meta_box' ) );
88 } else {
89 add_filter( 'sharing_meta_box_title', array( $this->settings, 'add_likes_to_sharing_meta_box_title' ) );
90 add_action( 'start_sharing_meta_box_content', array( $this->settings, 'meta_box_content' ) );
91 }
92
93 add_action( 'save_post', array( $this->settings, 'meta_box_save' ) );
94 add_action( 'edit_attachment', array( $this->settings, 'meta_box_save' ) );
95 add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_init' ), 20 );
96 add_action( 'sharing_admin_update', array( $this->settings, 'admin_settings_callback' ), 20 );
97 }
98 }
99
100 /**
101 * Initialize admin section
102 */
103 public function admin_init() {
104 add_filter( 'manage_edit-comments_columns', array( $this, 'add_like_count_column' ) );
105 add_action( 'manage_comments_custom_column', array( $this, 'comment_likes_edit_column' ), 10, 2 );
106 add_action( 'admin_print_styles-edit-comments.php', array( $this, 'enqueue_admin_styles_scripts' ) );
107 }
108
109 /**
110 * Displays number of comment likes in comment admin page.
111 *
112 * @param string $column_name name of the column.
113 * @param int $comment_id ID of the comment.
114 */
115 public function comment_likes_edit_column( $column_name, $comment_id ) {
116 if ( 'comment_likes' !== $column_name ) {
117 return;
118 }
119
120 $permalink = get_permalink( get_the_ID() );
121 ?>
122 <a
123 data-comment-id="<?php echo absint( $comment_id ); ?>"
124 data-blog-id="<?php echo absint( $this->blog_id ); ?>"
125 class="comment-like-count"
126 id="comment-like-count-<?php echo absint( $comment_id ); ?>"
127 href="<?php echo esc_url( $permalink ); ?>#comment-<?php echo absint( $comment_id ); ?>"
128 >
129 <span class="like-count">0</span>
130 </a>
131 <?php
132 }
133
134 /**
135 * Enqueue admin style scripts.
136 */
137 public function enqueue_admin_styles_scripts() {
138 wp_enqueue_style( 'comment-like-count', plugins_url( 'comment-likes/admin-style.css', __FILE__ ), array(), JETPACK__VERSION );
139 wp_enqueue_script(
140 'comment-like-count',
141 Assets::get_file_url_for_environment(
142 '_inc/build/comment-likes/comment-like-count.min.js',
143 'modules/comment-likes/comment-like-count.js'
144 ),
145 array( 'jquery' ),
146 JETPACK__VERSION,
147 false
148 );
149 }
150
151 /**
152 * Adds like count column to admin page.
153 *
154 * @param array $columns column of admin table.
155 */
156 public function add_like_count_column( $columns ) {
157 $columns['comment_likes'] = '<span class="vers"></span>';
158 return $columns;
159 }
160
161 /**
162 * Initialize front end
163 */
164 public function frontend_init() {
165 if ( class_exists( Jetpack_AMP_Support::class ) && Jetpack_AMP_Support::is_amp_request() ) {
166 return;
167 }
168
169 add_action( 'wp_enqueue_scripts', array( $this, 'load_styles_register_scripts' ) );
170 add_filter( 'comment_text', array( $this, 'comment_likes' ), 10, 2 );
171 }
172
173 /**
174 * Load styling scripts
175 */
176 public function load_styles_register_scripts() {
177 if ( ! $this->settings->is_likes_visible() ) {
178 return;
179 }
180
181 if ( ! wp_style_is( 'open-sans', 'registered' ) ) {
182 wp_register_style( 'open-sans', 'https://fonts.googleapis.com/css?family=Open+Sans', array(), JETPACK__VERSION );
183 }
184 wp_enqueue_style( 'jetpack_likes', plugins_url( 'likes/style.css', __FILE__ ), array( 'open-sans' ), JETPACK__VERSION );
185 wp_enqueue_script( 'jetpack_likes_queuehandler', plugins_url( 'likes/queuehandler.js', __FILE__ ), array(), JETPACK__VERSION, true );
186 }
187
188 /**
189 * Display like count.
190 *
191 * @param string $content text content of the comment itself.
192 * @param object $comment comment object containing comment data.
193 */
194 public function comment_likes( $content, $comment = null ) {
195 if ( empty( $comment ) ) {
196 return $content;
197 }
198
199 if ( ! $this->settings->is_likes_visible() ) {
200 return $content;
201 }
202
203 $comment_id = get_comment_ID();
204 if ( empty( $comment_id ) && ! empty( $comment->comment_ID ) ) {
205 $comment_id = $comment->comment_ID;
206 }
207
208 if ( empty( $content ) || empty( $comment_id ) ) {
209 return $content;
210 }
211
212 if ( empty( $comment->comment_approved ) ) {
213 return $content;
214 }
215
216 // In case master iframe hasn't been loaded. This could be the case when Post Likes module is disabled,
217 // or on pages on which we have comments but post likes are disabled.
218 if ( false === has_action( 'wp_footer', 'jetpack_likes_master_iframe' ) ) {
219 add_action( 'wp_footer', 'jetpack_likes_master_iframe', 21 );
220 }
221
222 $uniqid = uniqid();
223
224 $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 );
225 $name = sprintf( 'like-comment-frame-%1$d-%2$d-%3$s', $this->blog_id, $comment_id, $uniqid );
226 $wrapper = sprintf( 'like-comment-wrapper-%1$d-%2$d-%3$s', $this->blog_id, $comment_id, $uniqid );
227
228 $html = '';
229 $html .= "<div class='jetpack-comment-likes-widget-wrapper jetpack-likes-widget-unloaded' id='$wrapper' data-src='$src' data-name='$name'>";
230 $html .= "<div class='likes-widget-placeholder comment-likes-widget-placeholder comment-likes'><span class='loading'>" . esc_html__( 'Loading...', 'jetpack' ) . '</span></div>';
231 $html .= "<div class='comment-likes-widget jetpack-likes-widget comment-likes'><span class='comment-like-feedback'></span>";
232 $html .= "<span class='sd-text-color'></span><a class='sd-link-color'></a>";
233 $html .= '</div></div>';
234
235 /**
236 * Filters the Comment Likes button content.
237 *
238 * @module comment-likes
239 *
240 * @since 5.1.0
241 *
242 * @param string $html Comment Likes button content.
243 */
244 $like_button = apply_filters( 'comment_like_button', $html );
245
246 return $content . $like_button;
247 }
248 }
249
250 Jetpack_Comment_Likes::init();
251