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