<?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileName /** * Module Name: Comment Likes * Module Description: Increase visitor engagement by adding a Like button to comments. * Sort Order: 39 * Recommendation Order: 17 * First Introduced: 5.1 * Requires Connection: Yes * Auto Activate: No * Module Tags: Social * Additional Search Queries: like widget, like button, like, likes * * @package automattic/jetpack */ use Automattic\Jetpack\Assets; Assets::add_resource_hint( '//widgets.wp.com', 'dns-prefetch' ); require_once __DIR__ . '/likes/jetpack-likes-master-iframe.php'; require_once __DIR__ . '/likes/jetpack-likes-settings.php'; /** * Jetpack Comment Like Class */ class Jetpack_Comment_Likes { /** * Jetpack_Likes_Settings object * * @var Jetpack_Likes_Settings */ public $settings; /** * Blog ID * * @var int */ public $blog_id; /** * Site home URL domain * * @var string */ public $domain; /** * Initialize comment like module */ public static function init() { static $instance = null; if ( ! $instance ) { $instance = new Jetpack_Comment_Likes(); } return $instance; } /** * Construct comment like module. */ private function __construct() { $this->settings = new Jetpack_Likes_Settings(); $this->blog_id = Jetpack_Options::get_option( 'id' ); $url_parts = wp_parse_url( home_url() ); $this->domain = $url_parts['host']; add_action( 'template_redirect', array( $this, 'frontend_init' ) ); add_action( 'admin_init', array( $this, 'admin_init' ) ); if ( ! Jetpack::is_module_active( 'likes' ) ) { $active = Jetpack::get_active_modules(); if ( ! in_array( 'sharedaddy', $active, true ) && ! in_array( 'publicize', $active, true ) ) { // we don't have a sharing page yet. add_action( 'admin_menu', array( $this->settings, 'sharing_menu' ) ); } if ( in_array( 'publicize', $active, true ) && ! in_array( 'sharedaddy', $active, true ) ) { // we have a sharing page but not the global options area. add_action( 'pre_admin_screen_sharing', array( $this->settings, 'sharing_block' ), 20 ); add_action( 'pre_admin_screen_sharing', array( $this->settings, 'updated_message' ), -10 ); } if ( ! in_array( 'sharedaddy', $active, true ) ) { add_action( 'admin_init', array( $this->settings, 'process_update_requests_if_sharedaddy_not_loaded' ) ); add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_showbuttonon_init' ), 19 ); add_action( 'sharing_admin_update', array( $this->settings, 'admin_settings_showbuttonon_callback' ), 19 ); add_action( 'admin_init', array( $this->settings, 'add_meta_box' ) ); } else { add_filter( 'sharing_meta_box_title', array( $this->settings, 'add_likes_to_sharing_meta_box_title' ) ); add_action( 'start_sharing_meta_box_content', array( $this->settings, 'meta_box_content' ) ); } add_action( 'save_post', array( $this->settings, 'meta_box_save' ) ); add_action( 'edit_attachment', array( $this->settings, 'meta_box_save' ) ); add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_init' ), 20 ); add_action( 'sharing_admin_update', array( $this->settings, 'admin_settings_callback' ), 20 ); } } /** * Initialize admin section */ public function admin_init() { add_filter( 'manage_edit-comments_columns', array( $this, 'add_like_count_column' ) ); add_action( 'manage_comments_custom_column', array( $this, 'comment_likes_edit_column' ), 10, 2 ); add_action( 'admin_print_styles-edit-comments.php', array( $this, 'enqueue_admin_styles_scripts' ) ); } /** * Displays number of comment likes in comment admin page. * * @param string $column_name name of the column. * @param int $comment_id ID of the comment. */ public function comment_likes_edit_column( $column_name, $comment_id ) { if ( 'comment_likes' !== $column_name ) { return; } $permalink = get_permalink( get_the_ID() ); ?> <a data-comment-id="<?php echo absint( $comment_id ); ?>" data-blog-id="<?php echo absint( $this->blog_id ); ?>" class="comment-like-count" id="comment-like-count-<?php echo absint( $comment_id ); ?>" href="<?php echo esc_url( $permalink ); ?>#comment-<?php echo absint( $comment_id ); ?>" > <span class="like-count">0</span> </a> <?php } /** * Enqueue admin style scripts. */ public function enqueue_admin_styles_scripts() { wp_enqueue_style( 'comment-like-count', plugins_url( 'comment-likes/admin-style.css', __FILE__ ), array(), JETPACK__VERSION ); wp_enqueue_script( 'comment-like-count', Assets::get_file_url_for_environment( '_inc/build/comment-likes/comment-like-count.min.js', 'modules/comment-likes/comment-like-count.js' ), array( 'jquery' ), JETPACK__VERSION, false ); } /** * Adds like count column to admin page. * * @param array $columns column of admin table. */ public function add_like_count_column( $columns ) { $columns['comment_likes'] = '<span class="vers"></span>'; return $columns; } /** * Initialize front end */ public function frontend_init() { if ( class_exists( Jetpack_AMP_Support::class ) && Jetpack_AMP_Support::is_amp_request() ) { return; } add_action( 'wp_enqueue_scripts', array( $this, 'load_styles_register_scripts' ) ); add_filter( 'comment_text', array( $this, 'comment_likes' ), 10, 2 ); } /** * Load styling scripts */ public function load_styles_register_scripts() { if ( ! $this->settings->is_likes_visible() ) { return; } if ( ! wp_style_is( 'open-sans', 'registered' ) ) { wp_register_style( 'open-sans', 'https://fonts.googleapis.com/css?family=Open+Sans', array(), JETPACK__VERSION ); } wp_enqueue_style( 'jetpack_likes', plugins_url( 'likes/style.css', __FILE__ ), array( 'open-sans' ), JETPACK__VERSION ); wp_enqueue_script( 'jetpack_likes_queuehandler', plugins_url( 'likes/queuehandler.js', __FILE__ ), array(), JETPACK__VERSION, true ); } /** * Display like count. * * @param string $content text content of the comment itself. * @param object $comment comment object containing comment data. */ public function comment_likes( $content, $comment = null ) { if ( empty( $comment ) ) { return $content; } if ( ! $this->settings->is_likes_visible() ) { return $content; } $comment_id = get_comment_ID(); if ( empty( $comment_id ) && ! empty( $comment->comment_ID ) ) { $comment_id = $comment->comment_ID; } if ( empty( $content ) || empty( $comment_id ) ) { return $content; } // In case master iframe hasn't been loaded. This could be the case when Post Likes module is disabled, // or on pages on which we have comments but post likes are disabled. if ( false === has_action( 'wp_footer', 'jetpack_likes_master_iframe' ) ) { add_action( 'wp_footer', 'jetpack_likes_master_iframe', 21 ); } $uniqid = uniqid(); $src = sprintf( 'https://widgets.wp.com/likes/#blog_id=%1$d&comment_id=%2$d&origin=%3$s&obj_id=%1$d-%2$d-%4$s', $this->blog_id, $comment_id, $this->domain, $uniqid ); $name = sprintf( 'like-comment-frame-%1$d-%2$d-%3$s', $this->blog_id, $comment_id, $uniqid ); $wrapper = sprintf( 'like-comment-wrapper-%1$d-%2$d-%3$s', $this->blog_id, $comment_id, $uniqid ); $html = ''; $html .= "<div class='jetpack-comment-likes-widget-wrapper jetpack-likes-widget-unloaded' id='$wrapper' data-src='$src' data-name='$name'>"; $html .= "<div class='likes-widget-placeholder comment-likes-widget-placeholder comment-likes'><span class='loading'>" . esc_html__( 'Loading...', 'jetpack' ) . '</span></div>'; $html .= "<div class='comment-likes-widget jetpack-likes-widget comment-likes'><span class='comment-like-feedback'></span>"; $html .= "<span class='sd-text-color'></span><a class='sd-link-color'></a>"; $html .= '</div></div>'; /** * Filters the Comment Likes button content. * * @module comment-likes * * @since 5.1.0 * * @param string $html Comment Likes button content. */ $like_button = apply_filters( 'comment_like_button', $html ); return $content . $like_button; } } Jetpack_Comment_Likes::init();
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
calypsoify | Folder | 0755 |
|
|
carousel | Folder | 0755 |
|
|
cloudflare-analytics | Folder | 0755 |
|
|
comment-likes | Folder | 0755 |
|
|
comments | Folder | 0755 |
|
|
contact-form | Folder | 0755 |
|
|
custom-css | Folder | 0755 |
|
|
custom-post-types | Folder | 0755 |
|
|
geo-location | Folder | 0755 |
|
|
google-analytics | Folder | 0755 |
|
|
google-fonts | Folder | 0755 |
|
|
gravatar | Folder | 0755 |
|
|
infinite-scroll | Folder | 0755 |
|
|
likes | Folder | 0755 |
|
|
markdown | Folder | 0755 |
|
|
masterbar | Folder | 0755 |
|
|
memberships | Folder | 0755 |
|
|
photon-cdn | Folder | 0755 |
|
|
plugin-search | Folder | 0755 |
|
|
post-by-email | Folder | 0755 |
|
|
related-posts | Folder | 0755 |
|
|
scan | Folder | 0755 |
|
|
seo-tools | Folder | 0755 |
|
|
sharedaddy | Folder | 0755 |
|
|
shortcodes | Folder | 0755 |
|
|
simple-payments | Folder | 0755 |
|
|
site-icon | Folder | 0755 |
|
|
sitemaps | Folder | 0755 |
|
|
sso | Folder | 0755 |
|
|
stats | Folder | 0755 |
|
|
subscriptions | Folder | 0755 |
|
|
theme-tools | Folder | 0755 |
|
|
tiled-gallery | Folder | 0755 |
|
|
verification-tools | Folder | 0755 |
|
|
videopress | Folder | 0755 |
|
|
widget-visibility | Folder | 0755 |
|
|
widgets | Folder | 0755 |
|
|
woocommerce-analytics | Folder | 0755 |
|
|
wordads | Folder | 0755 |
|
|
wpcom-block-editor | Folder | 0755 |
|
|
wpcom-tos | Folder | 0755 |
|
|
action-bar.php | File | 644 B | 0644 |
|
blaze.php | File | 419 B | 0644 |
|
carousel.php | File | 573 B | 0644 |
|
comment-likes.php | File | 8.03 KB | 0644 |
|
comments.php | File | 1.06 KB | 0644 |
|
contact-form.php | File | 7.47 KB | 0644 |
|
copy-post.php | File | 12.27 KB | 0644 |
|
custom-content-types.php | File | 1.53 KB | 0644 |
|
custom-css.php | File | 1.37 KB | 0644 |
|
enhanced-distribution.php | File | 2.4 KB | 0644 |
|
geo-location.php | File | 2.44 KB | 0644 |
|
google-analytics.php | File | 501 B | 0644 |
|
google-fonts.php | File | 533 B | 0644 |
|
gravatar-hovercards.php | File | 11.8 KB | 0644 |
|
infinite-scroll.php | File | 8.19 KB | 0644 |
|
json-api.php | File | 484 B | 0644 |
|
latex.php | File | 4.61 KB | 0644 |
|
lazy-images.php | File | 955 B | 0644 |
|
likes.php | File | 21.59 KB | 0644 |
|
markdown.php | File | 1007 B | 0644 |
|
masterbar.php | File | 1.56 KB | 0644 |
|
module-extras.php | File | 2.93 KB | 0644 |
|
module-headings.php | File | 46.17 KB | 0644 |
|
module-info.php | File | 27.93 KB | 0644 |
|
monitor.php | File | 3.51 KB | 0644 |
|
notes.php | File | 7.6 KB | 0644 |
|
photon-cdn.php | File | 12.17 KB | 0644 |
|
photon.php | File | 711 B | 0644 |
|
plugin-search.php | File | 20.06 KB | 0644 |
|
post-by-email.php | File | 596 B | 0644 |
|
post-list.php | File | 533 B | 0644 |
|
protect.php | File | 694 B | 0644 |
|
publicize.php | File | 4.24 KB | 0644 |
|
related-posts.php | File | 2.14 KB | 0644 |
|
search.php | File | 1.17 KB | 0644 |
|
seo-tools.php | File | 1.52 KB | 0644 |
|
sharedaddy.php | File | 1.6 KB | 0644 |
|
shortcodes.php | File | 6.06 KB | 0644 |
|
shortlinks.php | File | 4.37 KB | 0644 |
|
sitemaps.php | File | 1.28 KB | 0644 |
|
sso.php | File | 40.16 KB | 0644 |
|
stats.php | File | 50.88 KB | 0644 |
|
subscriptions.php | File | 35.02 KB | 0644 |
|
theme-tools.php | File | 2.52 KB | 0644 |
|
tiled-gallery.php | File | 1.05 KB | 0644 |
|
vaultpress.php | File | 1.77 KB | 0644 |
|
verification-tools.php | File | 830 B | 0644 |
|
videopress.php | File | 1007 B | 0644 |
|
waf.php | File | 297 B | 0644 |
|
widget-visibility.php | File | 475 B | 0644 |
|
widgets.php | File | 2.86 KB | 0644 |
|
woocommerce-analytics.php | File | 631 B | 0644 |
|
wordads.php | File | 586 B | 0644 |
|
wpgroho.js | File | 1.91 KB | 0644 |
|