PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 8.1.1
Jetpack – WP Security, Backup, Speed, & Growth v8.1.1
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 All 500 releases
jetpack / modules / comment-likes.php
comment-likes.php
209 lines 7.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
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
14 use Automattic\Jetpack\Assets;
15
16 Jetpack::dns_prefetch(
17 array(
18 '//widgets.wp.com',
19 )
20 );
21
22 require_once dirname( __FILE__ ) . '/likes/jetpack-likes-master-iframe.php';
23 require_once dirname( __FILE__ ) . '/likes/jetpack-likes-settings.php';
24
25 class Jetpack_Comment_Likes {
26
27 public static function init() {
28 static $instance = NULL;
29
30 if ( ! $instance ) {
31 $instance = new Jetpack_Comment_Likes();
32 }
33
34 return $instance;
35 }
36
37 private function __construct() {
38 $this->settings = new Jetpack_Likes_Settings();
39 $this->blog_id = Jetpack_Options::get_option( 'id' );
40 $this->url = home_url();
41 $this->url_parts = wp_parse_url( $this->url );
42 $this->domain = $this->url_parts['host'];
43
44 add_action( 'template_redirect', array( $this, 'frontend_init' ) );
45 add_action( 'admin_init', array( $this, 'admin_init' ) );
46
47 if ( ! Jetpack::is_module_active( 'likes' ) ) {
48 $active = Jetpack::get_active_modules();
49
50 if ( ! in_array( 'sharedaddy', $active ) && ! in_array( 'publicize', $active ) ) {
51 // we don't have a sharing page yet
52 add_action( 'admin_menu', array( $this->settings, 'sharing_menu' ) );
53 }
54
55 if ( in_array( 'publicize', $active ) && ! in_array( 'sharedaddy', $active ) ) {
56 // we have a sharing page but not the global options area
57 add_action( 'pre_admin_screen_sharing', array( $this->settings, 'sharing_block' ), 20 );
58 add_action( 'pre_admin_screen_sharing', array( $this->settings, 'updated_message' ), -10 );
59 }
60
61 if( ! in_array( 'sharedaddy', $active ) ) {
62 add_action( 'admin_init', array( $this->settings, 'process_update_requests_if_sharedaddy_not_loaded' ) );
63 add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_showbuttonon_init' ), 19 );
64 add_action( 'sharing_admin_update', array( $this->settings, 'admin_settings_showbuttonon_callback' ), 19 );
65 add_action( 'admin_init', array( $this->settings, 'add_meta_box' ) );
66 } else {
67 add_filter( 'sharing_meta_box_title', array( $this->settings, 'add_likes_to_sharing_meta_box_title' ) );
68 add_action( 'start_sharing_meta_box_content', array( $this->settings, 'meta_box_content' ) );
69 }
70
71 add_action( 'save_post', array( $this->settings, 'meta_box_save' ) );
72 add_action( 'edit_attachment', array( $this->settings, 'meta_box_save' ) );
73 add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_init' ), 20 );
74 add_action( 'sharing_admin_update', array( $this->settings, 'admin_settings_callback' ), 20 );
75 }
76 }
77
78 public function admin_init() {
79 add_filter( 'manage_edit-comments_columns', array( $this, 'add_like_count_column' ) );
80 add_action( 'manage_comments_custom_column', array( $this, 'comment_likes_edit_column' ), 10, 2 );
81 add_action( 'admin_print_styles-edit-comments.php', array( $this, 'enqueue_admin_styles_scripts' ) );
82 }
83
84 public function comment_likes_edit_column( $column_name, $comment_id ) {
85 if ( 'comment_likes' !== $column_name ) {
86 return;
87 }
88
89 $permalink = get_permalink( get_the_ID() );
90 ?>
91 <a
92 data-comment-id="<?php echo absint( $comment_id ); ?>"
93 data-blog-id="<?php echo absint( $this->blog_id ); ?>"
94 class="comment-like-count"
95 id="comment-like-count-<?php echo absint( $comment_id ); ?>"
96 href="<?php echo esc_url( $permalink ); ?>#comment-<?php echo absint( $comment_id ); ?>"
97 >
98 <span class="like-count">0</span>
99 </a>
100 <?php
101 }
102
103 function enqueue_admin_styles_scripts() {
104 wp_enqueue_style( 'comment-like-count', plugins_url( 'comment-likes/admin-style.css', __FILE__ ), array(), JETPACK__VERSION );
105 wp_enqueue_script(
106 'comment-like-count',
107 Assets::get_file_url_for_environment(
108 '_inc/build/comment-likes/comment-like-count.min.js',
109 'modules/comment-likes/comment-like-count.js'
110 ),
111 array( 'jquery' ),
112 JETPACK__VERSION
113 );
114 }
115
116 public function add_like_count_column( $columns ) {
117 $columns['comment_likes'] = '<span class="vers"></span>';
118
119 return $columns;
120 }
121
122 public function frontend_init() {
123 if ( Jetpack_AMP_Support::is_amp_request() ) {
124 return;
125 }
126
127 add_action( 'wp_enqueue_scripts', array( $this, 'load_styles_register_scripts' ) );
128 add_filter( 'comment_text', array( $this, 'comment_likes' ), 10, 2 );
129 }
130
131 public function load_styles_register_scripts() {
132 if ( ! wp_style_is( 'open-sans', 'registered' ) ) {
133 wp_register_style( 'open-sans', 'https://fonts.googleapis.com/css?family=Open+Sans', array(), JETPACK__VERSION );
134 }
135 wp_enqueue_style( 'jetpack_likes', plugins_url( 'likes/style.css', __FILE__ ), array( 'open-sans' ), JETPACK__VERSION );
136 wp_enqueue_script(
137 'postmessage',
138 Assets::get_file_url_for_environment( '_inc/build/postmessage.min.js', '_inc/postmessage.js' ),
139 array( 'jquery' ),
140 JETPACK__VERSION,
141 false
142 );
143 wp_enqueue_script(
144 'jetpack_resize',
145 Assets::get_file_url_for_environment(
146 '_inc/build/jquery.jetpack-resize.min.js',
147 '_inc/jquery.jetpack-resize.js'
148 ),
149 array( 'jquery' ),
150 JETPACK__VERSION,
151 false
152 );
153 wp_enqueue_script( 'jetpack_likes_queuehandler', plugins_url( 'likes/queuehandler.js' , __FILE__ ), array( 'jquery', 'postmessage', 'jetpack_resize' ), JETPACK__VERSION, true );
154 }
155
156 public function comment_likes( $content, $comment = null ) {
157 if ( empty( $comment ) ) {
158 return $content;
159 }
160
161 if ( ! $this->settings->is_likes_visible() ) {
162 return $content;
163 }
164
165 $comment_id = get_comment_ID();
166 if ( empty( $comment_id ) && ! empty( $comment->comment_ID ) ) {
167 $comment_id = $comment->comment_ID;
168 }
169
170 if ( empty( $content ) || empty( $comment_id ) ) {
171 return $content;
172 }
173
174 // In case master iframe hasn't been loaded. This could be the case when Post Likes module is disabled,
175 // or on pages on which we have comments but post likes are disabled.
176 if ( false === has_action( 'wp_footer', 'jetpack_likes_master_iframe' ) ) {
177 add_action( 'wp_footer', 'jetpack_likes_master_iframe', 21 );
178 }
179
180 $uniqid = uniqid();
181
182 $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 );
183 $name = sprintf( 'like-comment-frame-%1$d-%2$d-%3$s', $this->blog_id, $comment_id, $uniqid );
184 $wrapper = sprintf( 'like-comment-wrapper-%1$d-%2$d-%3$s', $this->blog_id, $comment_id, $uniqid );
185
186 $html = '';
187 $html .= "<div class='jetpack-comment-likes-widget-wrapper jetpack-likes-widget-unloaded' id='$wrapper' data-src='$src' data-name='$name'>";
188 $html .= "<div class='likes-widget-placeholder comment-likes-widget-placeholder comment-likes'><span class='loading'>" . esc_html__( 'Loading...', 'jetpack' ) . "</span></div>";
189 $html .= "<div class='comment-likes-widget jetpack-likes-widget comment-likes'><span class='comment-like-feedback'></span>";
190 $html .= "<span class='sd-text-color'></span><a class='sd-link-color'></a>";
191 $html .= '</div></div>';
192
193 /**
194 * Filters the Comment Likes button content.
195 *
196 * @module comment-likes
197 *
198 * @since 5.1.0
199 *
200 * @param string $html Comment Likes button content.
201 */
202 $like_button = apply_filters( 'comment_like_button', $html );
203
204 return $content . $like_button;
205 }
206 }
207
208 Jetpack_Comment_Likes::init();
209