Changeset 3428591
- Timestamp:
- 12/28/2025 12:32:11 PM (2 months ago)
- Location:
- wp-ulike/trunk
- Files:
-
- 11 added
- 3 deleted
- 16 edited
-
admin/admin-ajax.php (modified) (4 diffs)
-
admin/classes/class-wp-ulike-stats.php (modified) (1 diff)
-
admin/classes/class-wp-ulike-widget.php (modified) (1 diff)
-
admin/includes/statistics/asset-manifest.json (modified) (1 diff)
-
admin/includes/statistics/static/css/main.8ca34121.css (deleted)
-
admin/includes/statistics/static/css/main.a376c821.css (added)
-
admin/includes/statistics/static/js/main.8ac206e9.js (added)
-
admin/includes/statistics/static/js/main.8ac206e9.js.LICENSE.txt (added)
-
admin/includes/statistics/static/js/main.9a458971.js (deleted)
-
admin/includes/statistics/static/js/main.9a458971.js.LICENSE.txt (deleted)
-
admin/settings/classes/shortcode-options.class.php (modified) (1 diff)
-
assets/js/wp-ulike.js (modified) (1 diff)
-
includes/blocks (added)
-
includes/blocks/button (added)
-
includes/blocks/button/block.json (added)
-
includes/blocks/button/render.php (added)
-
includes/blocks/button/src (added)
-
includes/blocks/button/src/editor.css (added)
-
includes/blocks/button/src/index.js (added)
-
includes/blocks/index.php (added)
-
includes/classes/class-wp-ulike-activator.php (modified) (7 diffs)
-
includes/classes/class-wp-ulike-frontend-assets.php (modified) (1 diff)
-
includes/functions/queries.php (modified) (2 diffs)
-
includes/functions/templates.php (modified) (1 diff)
-
includes/functions/utilities.php (modified) (1 diff)
-
includes/index.php (modified) (1 diff)
-
includes/plugin.php (modified) (1 diff)
-
languages/wp-ulike.pot (modified) (20 diffs)
-
readme.txt (modified) (4 diffs)
-
wp-ulike.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
wp-ulike/trunk/admin/admin-ajax.php
r3399008 r3428591 151 151 'Other Countries' => esc_html__( 'Other Countries', 'wp-ulike' ), 152 152 'for' => esc_html__( 'for', 'wp-ulike' ), 153 'Growth' => esc_html__( 'Growth', 'wp-ulike' ), 153 154 154 155 // Filters … … 191 192 'Comments' => esc_html__( 'Comments', 'wp-ulike' ), 192 193 'By' => esc_html__( 'By', 'wp-ulike' ), 194 'Views' => esc_html__( 'Views', 'wp-ulike' ), 193 195 194 196 // History … … 215 217 'Filter by type:' => esc_html__( 'Filter by type:', 'wp-ulike' ), 216 218 'per page' => esc_html__( 'per page', 'wp-ulike' ), 219 'View all' => esc_html__( 'View all', 'wp-ulike' ), 217 220 218 221 // Types … … 223 226 'Engagers' => esc_html__('Engagers', 'wp-ulike'), 224 227 225 // 404 226 'Nothing to See Here!' => esc_html__( 'Nothing to See Here!', 'wp-ulike' ), 227 'No content available. Try refreshing or check back later.' => esc_html__( 'No content available. Try refreshing or check back later.', 'wp-ulike' ), 228 // Not found 229 'Something Went Wrong' => esc_html__( 'Something Went Wrong', 'wp-ulike' ), 230 'We encountered an error while loading the data. Please try refreshing the page or contact support if the problem persists.' => esc_html__( 'We encountered an error while loading the data. Please try refreshing the page or contact support if the problem persists.', 'wp-ulike' ), 231 'Page Not Found' => esc_html__( 'Page Not Found', 'wp-ulike' ), 232 'The page you are looking for does not exist. It may have been moved or deleted.' => esc_html__( 'The page you are looking for does not exist. It may have been moved or deleted.', 'wp-ulike' ), 233 'No Data Available' => esc_html__( 'No Data Available', 'wp-ulike' ), 234 'There is no data to display at the moment. This could mean there are no records in the database yet, or the data is still being processed.' => esc_html__( 'There is no data to display at the moment. This could mean there are no records in the database yet, or the data is still being processed.', 'wp-ulike' ), 235 'Go to Home' => esc_html__( 'Go to Home', 'wp-ulike' ), 236 'Refresh Page' => esc_html__( 'Refresh Page', 'wp-ulike' ), 237 'If this problem continues, please contact support.' => esc_html__( 'If this problem continues, please contact support.', 'wp-ulike' ), 238 'Data will appear here once it becomes available.' => esc_html__( 'Data will appear here once it becomes available.', 'wp-ulike' ), 239 'Check the URL or return to the homepage.' => esc_html__( 'Check the URL or return to the homepage.', 'wp-ulike' ), 228 240 229 241 // Banners -
wp-ulike/trunk/admin/classes/class-wp-ulike-stats.php
r3406278 r3428591 171 171 * @return String 172 172 */ 173 public function select_data( $table ){ 174 175 $data_limit = apply_filters( 'wp_ulike_stats_data_limit', 30 ); 176 177 // Fetch the most recent date_time from the table 178 $latest_date = $this->wpdb->get_var( " 179 SELECT MAX(date_time) FROM `{$this->wpdb->prefix}{$table}` 180 "); 181 182 // Prepare the main query with the fetched latest date 183 $query = $this->wpdb->prepare( " 184 SELECT DATE(date_time) AS labels, 185 count(date_time) AS counts 186 FROM `{$this->wpdb->prefix}{$table}` 187 WHERE DATEDIFF(%s, date_time) <= 30 188 GROUP BY labels 189 ORDER BY labels ASC 190 LIMIT %d", 191 $latest_date, 192 $data_limit 193 ); 194 195 $result = $this->wpdb->get_results( $query ); 196 197 if( empty( $result ) ) { 198 $result = new stdClass(); 199 $result->labels = $result->counts = NULL; 200 } 201 202 return $result; 203 } 173 public function select_data( $table ){ 174 175 $data_limit = apply_filters( 'wp_ulike_stats_data_limit', 30 ); 176 177 // Ensure data_limit is a positive integer for safety 178 $data_limit = max( 1, absint( $data_limit ) ); 179 180 // Fetch the most recent date_time from the table 181 // MAX() query uses the date_time index efficiently (reverse index scan) 182 $table_escaped = esc_sql( $this->wpdb->prefix . $table ); 183 $latest_date = $this->wpdb->get_var( " 184 SELECT MAX(date_time) FROM `{$table_escaped}` 185 " ); 186 187 // If no data exists, return empty result 188 if( empty( $latest_date ) ) { 189 $result = new stdClass(); 190 $result->labels = $result->counts = NULL; 191 return $result; 192 } 193 194 // Calculate start date in PHP for maximum index optimization 195 // Use $data_limit for date range to match the data limit filter 196 // This ensures MySQL gets a constant value to compare against (most index-friendly) 197 $latest_timestamp = strtotime( $latest_date ); 198 199 // Safety check: ensure timestamp is valid 200 if( false === $latest_timestamp ) { 201 $result = new stdClass(); 202 $result->labels = $result->counts = NULL; 203 return $result; 204 } 205 206 // DAY_IN_SECONDS is a WordPress core constant (defined since WP 3.5) 207 $start_date = date( 'Y-m-d H:i:s', $latest_timestamp - ( $data_limit * DAY_IN_SECONDS ) ); 208 209 // Use index-friendly date range query with pre-calculated dates 210 // Direct comparison allows MySQL to use date_time index efficiently 211 // No LIMIT needed since date range naturally limits results to $data_limit days 212 // (GROUP BY DATE() returns at most one row per day) 213 $query = $this->wpdb->prepare( " 214 SELECT DATE(date_time) AS labels, 215 count(date_time) AS counts 216 FROM `{$table_escaped}` 217 WHERE date_time >= %s 218 AND date_time <= %s 219 GROUP BY labels 220 ORDER BY labels ASC", 221 $start_date, 222 $latest_date 223 ); 224 225 $result = $this->wpdb->get_results( $query ); 226 227 if( empty( $result ) ) { 228 $result = new stdClass(); 229 $result->labels = $result->counts = NULL; 230 } 231 232 return $result; 233 } 204 234 205 235 /** -
wp-ulike/trunk/admin/classes/class-wp-ulike-widget.php
r3215648 r3428591 437 437 * @author Alimir 438 438 * @since 2.4 439 * @deprecated 4.8.3 Use wp_ulike_get_period_limit_sql() instead 439 440 * @return String 440 441 */ 441 442 public function period($period){ 442 switch ($period) { 443 case "today": 444 return "AND DATE(date_time) = DATE(NOW())"; 445 case "yesterday": 446 return "AND DATE(date_time) = DATE(subdate(current_date, 1))"; 447 case "week": 448 return "AND week(DATE(date_time)) = week(DATE(NOW()))"; 449 case "month": 450 return "AND month(DATE(date_time)) = month(DATE(NOW()))"; 451 case "year": 452 return "AND year(DATE(date_time)) = year(DATE(NOW()))"; 453 default: 454 return ""; 455 } 443 // Deprecated: This method uses functions on columns which prevent index usage 444 // Use wp_ulike_get_period_limit_sql() instead for optimized queries 445 _deprecated_function( __METHOD__, '4.8.3', 'wp_ulike_get_period_limit_sql()' ); 446 447 // Return optimized version using the new function 448 $period_limit = wp_ulike_get_period_limit_sql( $period ); 449 return $period_limit ? $period_limit : ''; 456 450 } 457 451 -
wp-ulike/trunk/admin/includes/statistics/asset-manifest.json
r3250832 r3428591 1 1 { 2 2 "files": { 3 "main.css": "/static/css/main. 8ca34121.css",4 "main.js": "/static/js/main. 9a458971.js",3 "main.css": "/static/css/main.a376c821.css", 4 "main.js": "/static/js/main.8ac206e9.js", 5 5 "index.html": "/index.html" 6 6 }, 7 7 "entrypoints": [ 8 "static/css/main. 8ca34121.css",9 "static/js/main. 9a458971.js"8 "static/css/main.a376c821.css", 9 "static/js/main.8ac206e9.js" 10 10 ] 11 11 } -
wp-ulike/trunk/admin/settings/classes/shortcode-options.class.php
r3109919 r3428591 255 255 public static function once_editor_setup() { 256 256 257 if ( function_exists( 'register_block_type' ) ) { 258 add_action( 'enqueue_block_editor_assets', array( 'ULF_Shortcoder', 'add_guteberg_blocks' ) ); 259 } 257 // Disabled: Gutenberg blocks registration (using modern block implementation instead) 258 // The old block registration was causing iframe issues and conflicts with new blocks 259 // if ( function_exists( 'register_block_type' ) ) { 260 // add_action( 'enqueue_block_editor_assets', array( 'ULF_Shortcoder', 'add_guteberg_blocks' ) ); 261 // } 260 262 261 263 if ( ulf_wp_editor_api() ) { -
wp-ulike/trunk/assets/js/wp-ulike.js
r3412215 r3428591 1 /*! WP ULike - v4.8. 21 /*! WP ULike - v4.8.3 2 2 * https://wpulike.com 3 3 * TechnoWich 2025; -
wp-ulike/trunk/includes/classes/class-wp-ulike-activator.php
r3406278 r3428591 103 103 104 104 // Posts table 105 maybe_create_table( $posts, "CREATE TABLE `{$posts}` ( 105 if ( ! $this->table_exists( $posts ) ) { 106 maybe_create_table( $posts, "CREATE TABLE `{$posts}` ( 106 107 `id` bigint(20) NOT NULL AUTO_INCREMENT, 107 108 `post_id` bigint(20) NOT NULL, … … 125 126 KEY `post_id_date_time_user_id_status` (`post_id`, `date_time`, `user_id`, `status`) 126 127 ) $charset_collate AUTO_INCREMENT=1;" ); 128 } 127 129 128 130 // Comments table 129 maybe_create_table( $comments, "CREATE TABLE `{$comments}` ( 131 if ( ! $this->table_exists( $comments ) ) { 132 maybe_create_table( $comments, "CREATE TABLE `{$comments}` ( 130 133 `id` bigint(20) NOT NULL AUTO_INCREMENT, 131 134 `comment_id` bigint(20) NOT NULL, … … 149 152 KEY `comment_id_date_time_user_id_status` (`comment_id`, `date_time`, `user_id`, `status`) 150 153 ) $charset_collate AUTO_INCREMENT=1;" ); 154 } 151 155 152 156 // Activities table 153 maybe_create_table( $activities, "CREATE TABLE `{$activities}` ( 157 if ( ! $this->table_exists( $activities ) ) { 158 maybe_create_table( $activities, "CREATE TABLE `{$activities}` ( 154 159 `id` bigint(20) NOT NULL AUTO_INCREMENT, 155 160 `activity_id` bigint(20) NOT NULL, … … 173 178 KEY `activity_id_date_time_user_id_status` (`activity_id`, `date_time`, `user_id`, `status`) 174 179 ) $charset_collate AUTO_INCREMENT=1;" ); 180 } 175 181 176 182 // Forums table 177 maybe_create_table( $forums, "CREATE TABLE `{$forums}` ( 183 if ( ! $this->table_exists( $forums ) ) { 184 maybe_create_table( $forums, "CREATE TABLE `{$forums}` ( 178 185 `id` bigint(20) NOT NULL AUTO_INCREMENT, 179 186 `topic_id` bigint(20) NOT NULL, … … 197 204 KEY `topic_id_date_time_user_id_status` (`topic_id`, `date_time`, `user_id`, `status`) 198 205 ) $charset_collate AUTO_INCREMENT=1;" ); 199 206 } 200 207 201 208 // Meta values table 202 maybe_create_table( $meta, "CREATE TABLE `{$meta}` ( 209 if ( ! $this->table_exists( $meta ) ) { 210 maybe_create_table( $meta, "CREATE TABLE `{$meta}` ( 203 211 `meta_id` bigint(20) unsigned NOT NULL auto_increment, 204 212 `item_id` bigint(20) unsigned NOT NULL default '0', … … 212 220 KEY `meta_group_meta_key_item_id` (`meta_group`, `meta_key`, `item_id`) 213 221 ) $charset_collate AUTO_INCREMENT=1;" ); 222 } 214 223 215 224 // Update db version. … … 217 226 update_option( 'wp_ulike_dbVersion', WP_ULIKE_DB_VERSION ); 218 227 } 228 229 return true; 230 } 231 232 /** 233 * Check if a table exists in the database 234 * 235 * @param string $table_name 236 * @return bool 237 */ 238 protected function table_exists( $table_name ) { 239 // Use SHOW TABLES LIKE (WordPress standard approach - faster and more reliable) 240 $result = $this->database->get_var( $this->database->prepare( 241 'SHOW TABLES LIKE %s', 242 $table_name 243 ) ); 244 return $result === $table_name; 219 245 } 220 246 -
wp-ulike/trunk/includes/classes/class-wp-ulike-frontend-assets.php
r3399008 r3428591 68 68 */ 69 69 public function load_scripts() { 70 // Return if pro assets exist 71 if( defined( 'WP_ULIKE_PRO_VERSION' ) && version_compare( WP_ULIKE_PRO_VERSION, '1.5.3' ) > 0){70 // Return if pro assets exist (Pro >= 1.5.3 includes free scripts, so don't load free version) 71 if( defined( 'WP_ULIKE_PRO_VERSION' ) && version_compare( WP_ULIKE_PRO_VERSION, '1.5.3', '>=' ) ){ 72 72 return; 73 73 } -
wp-ulike/trunk/includes/functions/queries.php
r3406278 r3428591 511 511 $column_name = $parsed_args['settings']->getColumnName(); 512 512 513 // Use index-friendly date range query instead of DATE() function 514 // Pre-calculate today's date range for maximum index optimization 515 $today = current_time( 'Y-m-d' ); 516 $today_start = $today . ' 00:00:00'; 517 $today_end = $today . ' 23:59:59'; 518 513 519 $query = $wpdb->prepare( " 514 520 SELECT COUNT(*) … … 516 522 WHERE `$column_name` = %s 517 523 AND `user_id` = %d 518 AND DATE(date_time) = CURDATE()", 524 AND date_time >= %s 525 AND date_time <= %s", 519 526 $parsed_args['item_id'], 520 $parsed_args['current_user'] 527 $parsed_args['current_user'], 528 $today_start, 529 $today_end 521 530 ); 522 531 -
wp-ulike/trunk/includes/functions/templates.php
r3215648 r3428591 24 24 $default = array( 25 25 'wpulike-default' => array( 26 'name' => esc_html__(' Default', 'wp-ulike'),26 'name' => esc_html__('Simple', 'wp-ulike'), 27 27 'callback' => 'wp_ulike_set_default_template', 28 28 'symbol' => WP_ULIKE_ASSETS_URL . '/img/svg/default.svg', -
wp-ulike/trunk/includes/functions/utilities.php
r3406278 r3428591 279 279 $period_limit = ''; 280 280 281 // Early return for NULL, empty, false, or 'all' - no date filtering needed 282 if( empty( $date_range ) || $date_range === 'all' ){ 283 return ''; 284 } 285 286 // Handle array-based date ranges 281 287 if( is_array( $date_range ) ){ 288 // Interval-based range (e.g., last 30 days) 282 289 if( isset( $date_range['interval_value'] ) ){ 283 // Interval time 284 $unit = empty( $date_range['interval_unit'] ) ? 'DAY' : esc_sql( $date_range['interval_unit'] ); 290 $allowed_units = array( 'MICROSECOND', 'SECOND', 'MINUTE', 'HOUR', 'DAY', 'WEEK', 'MONTH', 'QUARTER', 'YEAR' ); 291 $unit = empty( $date_range['interval_unit'] ) ? 'DAY' : strtoupper( $date_range['interval_unit'] ); 292 $unit = in_array( $unit, $allowed_units, true ) ? esc_sql( $unit ) : 'DAY'; 293 $interval_value = absint( $date_range['interval_value'] ); 294 285 295 $period_limit = $wpdb->prepare( 286 296 " AND date_time >= DATE_ADD( NOW(), INTERVAL - %d {$unit})", 287 $date_range['interval_value'] 288 ); 289 } elseif( isset( $date_range['start'] ) ){ 290 // Start/End time 297 $interval_value 298 ); 299 } 300 // Start/End date range 301 elseif( isset( $date_range['start'] ) ){ 302 $start_date = $date_range['start'] . ' 00:00:00'; 303 304 // Single date or date range 291 305 if( $date_range['start'] === $date_range['end'] ){ 292 $ period_limit = $wpdb->prepare( ' AND DATE(`date_time`) = %s', $date_range['start'] );306 $end_date = $date_range['start'] . ' 23:59:59'; 293 307 } else { 294 $period_limit = $wpdb->prepare( 295 ' AND DATE(`date_time`) >= %s AND DATE(`date_time`) <= %s', 296 $date_range['start'], 297 $date_range['end'] 298 ); 308 $end_timestamp = strtotime( $date_range['end'] ); 309 $end_date = ( false === $end_timestamp ) 310 ? $date_range['end'] . ' 23:59:59' 311 : date( 'Y-m-d 23:59:59', $end_timestamp ); 299 312 } 313 314 $period_limit = $wpdb->prepare( 315 ' AND date_time >= %s AND date_time <= %s', 316 $start_date, 317 $end_date 318 ); 300 319 } 301 } elseif( !empty( $date_range )) { 302 switch ($date_range) { 303 case "today": 304 $period_limit = " AND DATE(date_time) = DATE(NOW())"; 305 break; 306 case "yesterday": 307 $period_limit = " AND DATE(date_time) = DATE(subdate(current_date, 1))"; 308 break; 309 case "day_before_yesterday": 310 $period_limit = " AND DATE(date_time) = DATE(subdate(current_date, 2))"; 311 break; 312 case "week": 313 $period_limit = " AND WEEK(DATE(date_time), 1) = WEEK(DATE(NOW()), 1) AND YEAR(DATE(date_time)) = YEAR(DATE(NOW()))"; 314 break; 315 case "last_week": 316 $period_limit = " AND WEEK(DATE(date_time), 1) = ( WEEK(DATE(NOW()), 1) - 1 ) AND YEAR(DATE(date_time)) = YEAR(DATE(NOW()))"; 317 break; 318 case "month": 319 $period_limit = " AND MONTH(DATE(date_time)) = MONTH(DATE(NOW())) AND YEAR(DATE(date_time)) = YEAR(DATE(NOW()))"; 320 break; 321 case "last_month": 322 $period_limit = " AND MONTH(DATE(date_time)) = MONTH(DATE(NOW()) - INTERVAL 1 MONTH) AND YEAR(DATE(date_time)) = YEAR(DATE(NOW()) - INTERVAL 1 MONTH)"; 323 break; 324 case "year": 325 $period_limit = " AND YEAR(DATE(date_time)) = YEAR(DATE(NOW()))"; 326 break; 327 case "last_year": 328 $period_limit = " AND YEAR(DATE(date_time)) = YEAR(DATE(NOW()) - INTERVAL 1 YEAR)"; 329 break; 330 } 320 321 return apply_filters( 'wp_ulike_period_limit_sql', $period_limit, $date_range ); 322 } 323 324 // Handle string-based date ranges (pre-calculated for index optimization) 325 switch ( $date_range ) { 326 case "today": 327 $today = current_time( 'Y-m-d' ); 328 $period_limit = $wpdb->prepare( 329 " AND date_time >= %s AND date_time <= %s", 330 $today . ' 00:00:00', 331 $today . ' 23:59:59' 332 ); 333 break; 334 335 case "yesterday": 336 $yesterday = date( 'Y-m-d', current_time( 'timestamp' ) - DAY_IN_SECONDS ); 337 $period_limit = $wpdb->prepare( 338 " AND date_time >= %s AND date_time <= %s", 339 $yesterday . ' 00:00:00', 340 $yesterday . ' 23:59:59' 341 ); 342 break; 343 344 case "day_before_yesterday": 345 $day_before = date( 'Y-m-d', current_time( 'timestamp' ) - ( 2 * DAY_IN_SECONDS ) ); 346 $period_limit = $wpdb->prepare( 347 " AND date_time >= %s AND date_time <= %s", 348 $day_before . ' 00:00:00', 349 $day_before . ' 23:59:59' 350 ); 351 break; 352 case "week": 353 case "last_week": 354 // Respect WordPress start_of_week setting (0=Sunday, 1=Monday, etc.) 355 $start_of_week = (int) get_option( 'start_of_week', 1 ); 356 $today_timestamp = current_time( 'timestamp' ); 357 $day_of_week = (int) date( 'w', $today_timestamp ); 358 $days_to_subtract = ( $day_of_week - $start_of_week + 7 ) % 7; 359 360 // Add 7 days for last_week 361 $days_offset = ( $date_range === 'last_week' ) ? 7 : 0; 362 $week_start = date( 'Y-m-d', $today_timestamp - ( ( $days_to_subtract + $days_offset ) * DAY_IN_SECONDS ) ); 363 $week_end = date( 'Y-m-d', strtotime( $week_start . ' +6 days' ) ); 364 365 $period_limit = $wpdb->prepare( 366 " AND date_time >= %s AND date_time <= %s", 367 $week_start . ' 00:00:00', 368 $week_end . ' 23:59:59' 369 ); 370 break; 371 case "month": 372 $period_limit = $wpdb->prepare( 373 " AND date_time >= %s AND date_time <= %s", 374 current_time( 'Y-m-01 00:00:00' ), 375 current_time( 'Y-m-t 23:59:59' ) 376 ); 377 break; 378 379 case "last_month": 380 $current_timestamp = current_time( 'timestamp' ); 381 $last_month_start = date( 'Y-m-01 00:00:00', strtotime( 'first day of last month', $current_timestamp ) ); 382 $last_month_end = date( 'Y-m-t 23:59:59', strtotime( 'last day of last month', $current_timestamp ) ); 383 $period_limit = $wpdb->prepare( 384 " AND date_time >= %s AND date_time <= %s", 385 $last_month_start, 386 $last_month_end 387 ); 388 break; 389 390 case "year": 391 $period_limit = $wpdb->prepare( 392 " AND date_time >= %s AND date_time <= %s", 393 current_time( 'Y-01-01 00:00:00' ), 394 current_time( 'Y-12-31 23:59:59' ) 395 ); 396 break; 397 398 case "last_year": 399 $last_year = date( 'Y', strtotime( '-1 year', current_time( 'timestamp' ) ) ); 400 $period_limit = $wpdb->prepare( 401 " AND date_time >= %s AND date_time <= %s", 402 $last_year . '-01-01 00:00:00', 403 $last_year . '-12-31 23:59:59' 404 ); 405 break; 331 406 } 332 407 -
wp-ulike/trunk/includes/index.php
r3215648 r3428591 32 32 include_once( 'hooks/shortcodes.php' ); 33 33 include_once( 'hooks/third-party.php' ); 34 35 // Blocks 36 include_once( 'blocks/index.php' ); -
wp-ulike/trunk/includes/plugin.php
r3406278 r3428591 232 232 */ 233 233 public static function is_rest() { 234 return defined( 'REST_REQUEST' ) ;234 return defined( 'REST_REQUEST' ) && REST_REQUEST; 235 235 } 236 236 -
wp-ulike/trunk/languages/wp-ulike.pot
r3406278 r3428591 3 3 msgid "" 4 4 msgstr "" 5 "Project-Id-Version: WP ULike 4.8. 1\n"5 "Project-Id-Version: WP ULike 4.8.3\n" 6 6 "Report-Msgid-Bugs-To: https://wpulike.com\n" 7 "POT-Creation-Date: 2025-1 1-30 08:02:02+00:00\n"7 "POT-Creation-Date: 2025-12-28 12:04:33+00:00\n" 8 8 "MIME-Version: 1.0\n" 9 9 "Content-Type: text/plain; charset=utf-8\n" … … 158 158 msgstr "" 159 159 160 #: admin/admin-ajax.php:185 admin/admin-hooks.php:603 admin/admin-hooks.php:678 160 #: admin/admin-ajax.php:183 161 msgid "Growth" 162 msgstr "" 163 164 #: admin/admin-ajax.php:186 admin/admin-hooks.php:594 admin/admin-hooks.php:669 161 165 #: admin/classes/class-wp-ulike-admin-panel.php:774 162 166 #: admin/classes/class-wp-ulike-admin-panel.php:781 … … 166 170 msgstr "" 167 171 168 #: admin/admin-ajax.php:18 6admin/classes/class-wp-ulike-admin-panel.php:786172 #: admin/admin-ajax.php:187 admin/classes/class-wp-ulike-admin-panel.php:786 169 173 #: admin/classes/class-wp-ulike-admin-panel.php:820 170 174 msgid "Unlike" 171 175 msgstr "" 172 176 173 #: admin/admin-ajax.php:18 7177 #: admin/admin-ajax.php:188 174 178 msgid "Dislike" 175 179 msgstr "" 176 180 177 #: admin/admin-ajax.php:18 8181 #: admin/admin-ajax.php:189 178 182 msgid "Undislike" 179 183 msgstr "" 180 184 181 #: admin/admin-ajax.php:1 89185 #: admin/admin-ajax.php:190 182 186 msgid "Select..." 183 187 msgstr "" 184 188 185 #: admin/admin-ajax.php:19 0189 #: admin/admin-ajax.php:191 186 190 msgid "Date Range" 187 191 msgstr "" 188 192 189 #: admin/admin-ajax.php:19 1193 #: admin/admin-ajax.php:192 190 194 msgid "This Week" 191 195 msgstr "" 192 196 193 #: admin/admin-ajax.php:19 2197 #: admin/admin-ajax.php:193 194 198 msgid "Last Week" 195 199 msgstr "" 196 200 197 #: admin/admin-ajax.php:19 3201 #: admin/admin-ajax.php:194 198 202 msgid "Last {{days}} Days" 199 203 msgstr "" 200 204 201 #: admin/admin-ajax.php:19 4205 #: admin/admin-ajax.php:195 202 206 msgid "Last {{months}} Months" 203 207 msgstr "" 204 208 205 #: admin/admin-ajax.php:19 5209 #: admin/admin-ajax.php:196 206 210 msgid "This Year" 207 211 msgstr "" 208 212 209 #: admin/admin-ajax.php:19 6213 #: admin/admin-ajax.php:197 210 214 msgid "Last Year" 211 215 msgstr "" 212 216 213 #: admin/admin-ajax.php:19 7217 #: admin/admin-ajax.php:198 214 218 msgid "Status Filter" 215 219 msgstr "" 216 220 217 #: admin/admin-ajax.php:19 8admin/classes/class-wp-ulike-admin-panel.php:375221 #: admin/admin-ajax.php:199 admin/classes/class-wp-ulike-admin-panel.php:375 218 222 #: admin/includes/templates/about.php:116 219 223 msgid "Content Types" 220 224 msgstr "" 221 225 222 #: admin/admin-ajax.php: 199226 #: admin/admin-ajax.php:200 223 227 msgid "Post Types" 224 228 msgstr "" 225 229 226 #: admin/admin-ajax.php:20 0230 #: admin/admin-ajax.php:201 227 231 msgid "View By" 228 232 msgstr "" 229 233 230 #: admin/admin-ajax.php:20 1234 #: admin/admin-ajax.php:202 231 235 msgid "Device" 232 236 msgstr "" 233 237 234 #: admin/admin-ajax.php:20 2238 #: admin/admin-ajax.php:203 235 239 msgid "OS" 236 240 msgstr "" 237 241 238 #: admin/admin-ajax.php:20 3242 #: admin/admin-ajax.php:204 239 243 msgid "Browser" 240 244 msgstr "" 241 245 242 #: admin/admin-ajax.php:20 4246 #: admin/admin-ajax.php:205 243 247 msgid "Show Filters" 244 248 msgstr "" 245 249 246 #: admin/admin-ajax.php:20 5250 #: admin/admin-ajax.php:206 247 251 msgid "Hide Filters" 248 252 msgstr "" 249 253 250 #: admin/admin-ajax.php:20 6254 #: admin/admin-ajax.php:207 251 255 msgid "Clear all" 252 256 msgstr "" 253 257 254 #: admin/admin-ajax.php:20 7258 #: admin/admin-ajax.php:208 255 259 msgid "Apply" 256 260 msgstr "" 257 261 258 #: admin/admin-ajax.php:21 0262 #: admin/admin-ajax.php:211 259 263 msgid "Dates" 260 264 msgstr "" 261 265 262 #: admin/admin-ajax.php:21 1266 #: admin/admin-ajax.php:212 263 267 msgid "Totals" 264 268 msgstr "" 265 269 266 #: admin/admin-ajax.php:21 2270 #: admin/admin-ajax.php:213 267 271 msgid "No data to display" 268 272 msgstr "" 269 273 270 #: admin/admin-ajax.php:21 3274 #: admin/admin-ajax.php:214 271 275 msgid "Daily Interactions" 272 276 msgstr "" 273 277 274 #: admin/admin-ajax.php:21 4278 #: admin/admin-ajax.php:215 275 279 msgid "Monthly Interactions" 276 280 msgstr "" 277 281 278 #: admin/admin-ajax.php:21 7282 #: admin/admin-ajax.php:218 279 283 msgid "Engaged Users" 280 284 msgstr "" 281 285 282 #: admin/admin-ajax.php:21 8286 #: admin/admin-ajax.php:219 283 287 msgid "Published" 284 288 msgstr "" 285 289 286 #: admin/admin-ajax.php:2 19 admin/admin-ajax.php:221 admin/admin-ajax.php:250290 #: admin/admin-ajax.php:220 admin/admin-ajax.php:222 admin/admin-ajax.php:253 287 291 #: admin/classes/class-wp-ulike-admin-panel.php:172 288 292 #: admin/classes/class-wp-ulike-admin-panel.php:345 … … 293 297 msgstr "" 294 298 295 #: admin/admin-ajax.php:22 0299 #: admin/admin-ajax.php:221 296 300 msgid "Engagement" 297 301 msgstr "" 298 302 299 #: admin/admin-ajax.php:22 2303 #: admin/admin-ajax.php:223 300 304 msgid "By" 301 305 msgstr "" 302 306 303 #: admin/admin-ajax.php:225 307 #: admin/admin-ajax.php:224 308 msgid "Views" 309 msgstr "" 310 311 #: admin/admin-ajax.php:227 304 312 msgid "Date" 305 313 msgstr "" 306 314 307 #: admin/admin-ajax.php:22 6315 #: admin/admin-ajax.php:228 308 316 msgid "User" 309 317 msgstr "" 310 318 311 #: admin/admin-ajax.php:22 7319 #: admin/admin-ajax.php:229 312 320 msgid "IP" 313 321 msgstr "" 314 322 315 #: admin/admin-ajax.php:2 28323 #: admin/admin-ajax.php:230 316 324 msgid "Status" 317 325 msgstr "" 318 326 319 #: admin/admin-ajax.php:2 29327 #: admin/admin-ajax.php:231 320 328 msgid "Comment Author" 321 329 msgstr "" 322 330 323 #: admin/admin-ajax.php:23 0331 #: admin/admin-ajax.php:232 324 332 msgid "Comment Content" 325 333 msgstr "" 326 334 327 #: admin/admin-ajax.php:23 1335 #: admin/admin-ajax.php:233 328 336 msgid "Activity Title" 329 337 msgstr "" 330 338 331 #: admin/admin-ajax.php:23 2339 #: admin/admin-ajax.php:234 332 340 msgid "Topic Title" 333 341 msgstr "" 334 342 335 #: admin/admin-ajax.php:23 3343 #: admin/admin-ajax.php:235 336 344 msgid "Post Title" 337 345 msgstr "" 338 346 339 #: admin/admin-ajax.php:23 4347 #: admin/admin-ajax.php:236 340 348 msgid "Category" 341 349 msgstr "" 342 350 343 #: admin/admin-ajax.php:23 5351 #: admin/admin-ajax.php:237 344 352 msgid "Actions" 345 353 msgstr "" 346 354 347 #: admin/admin-ajax.php:23 6355 #: admin/admin-ajax.php:238 348 356 msgid "Showing" 349 357 msgstr "" 350 358 351 #: admin/admin-ajax.php:23 7359 #: admin/admin-ajax.php:239 352 360 msgid "to" 353 361 msgstr "" 354 362 355 #: admin/admin-ajax.php:2 38363 #: admin/admin-ajax.php:240 356 364 msgid "of" 357 365 msgstr "" 358 366 359 #: admin/admin-ajax.php:2 39367 #: admin/admin-ajax.php:241 360 368 msgid "results" 361 369 msgstr "" 362 370 363 #: admin/admin-ajax.php:24 0371 #: admin/admin-ajax.php:242 364 372 msgid "Back" 365 373 msgstr "" 366 374 367 #: admin/admin-ajax.php:24 1375 #: admin/admin-ajax.php:243 368 376 msgid "Search" 369 377 msgstr "" 370 378 371 #: admin/admin-ajax.php:24 2379 #: admin/admin-ajax.php:244 372 380 msgid "Loading..." 373 381 msgstr "" 374 382 375 #: admin/admin-ajax.php:24 3383 #: admin/admin-ajax.php:245 376 384 msgid "Download CSV" 377 385 msgstr "" 378 386 379 #: admin/admin-ajax.php:24 4387 #: admin/admin-ajax.php:246 380 388 msgid "Delete Selected" 381 389 msgstr "" 382 390 383 #: admin/admin-ajax.php:24 5391 #: admin/admin-ajax.php:247 384 392 msgid "Filter by type:" 385 393 msgstr "" 386 394 387 #: admin/admin-ajax.php:24 6395 #: admin/admin-ajax.php:248 388 396 msgid "per page" 389 397 msgstr "" 390 398 391 #: admin/admin-ajax.php:249 admin/classes/class-wp-ulike-admin-panel.php:171 399 #: admin/admin-ajax.php:249 400 msgid "View all" 401 msgstr "" 402 403 #: admin/admin-ajax.php:252 admin/classes/class-wp-ulike-admin-panel.php:171 392 404 #: admin/classes/class-wp-ulike-admin-panel.php:344 393 405 #: admin/classes/class-wp-ulike-admin-panel.php:388 … … 397 409 msgstr "" 398 410 399 #: admin/admin-ajax.php:25 1admin/classes/class-wp-ulike-admin-panel.php:173411 #: admin/admin-ajax.php:254 admin/classes/class-wp-ulike-admin-panel.php:173 400 412 #: admin/classes/class-wp-ulike-admin-panel.php:346 401 413 #: includes/hooks/third-party.php:371 … … 403 415 msgstr "" 404 416 405 #: admin/admin-ajax.php:25 2admin/classes/class-wp-ulike-admin-panel.php:174417 #: admin/admin-ajax.php:255 admin/classes/class-wp-ulike-admin-panel.php:174 406 418 #: admin/classes/class-wp-ulike-admin-panel.php:347 407 419 #: includes/hooks/third-party.php:379 … … 409 421 msgstr "" 410 422 411 #: admin/admin-ajax.php:25 3423 #: admin/admin-ajax.php:256 412 424 msgid "Engagers" 413 425 msgstr "" 414 426 415 #: admin/admin-ajax.php:256 416 msgid "Nothing to See Here!" 417 msgstr "" 418 419 #: admin/admin-ajax.php:257 420 msgid "No content available. Try refreshing or check back later." 427 #: admin/admin-ajax.php:259 428 msgid "Something Went Wrong" 421 429 msgstr "" 422 430 423 431 #: admin/admin-ajax.php:260 432 msgid "" 433 "We encountered an error while loading the data. Please try refreshing the " 434 "page or contact support if the problem persists." 435 msgstr "" 436 437 #: admin/admin-ajax.php:261 438 msgid "Page Not Found" 439 msgstr "" 440 441 #: admin/admin-ajax.php:262 442 msgid "" 443 "The page you are looking for does not exist. It may have been moved or " 444 "deleted." 445 msgstr "" 446 447 #: admin/admin-ajax.php:263 448 msgid "No Data Available" 449 msgstr "" 450 451 #: admin/admin-ajax.php:264 452 msgid "" 453 "There is no data to display at the moment. This could mean there are no " 454 "records in the database yet, or the data is still being processed." 455 msgstr "" 456 457 #: admin/admin-ajax.php:265 458 msgid "Go to Home" 459 msgstr "" 460 461 #: admin/admin-ajax.php:266 462 msgid "Refresh Page" 463 msgstr "" 464 465 #: admin/admin-ajax.php:267 466 msgid "If this problem continues, please contact support." 467 msgstr "" 468 469 #: admin/admin-ajax.php:268 470 msgid "Data will appear here once it becomes available." 471 msgstr "" 472 473 #: admin/admin-ajax.php:269 474 msgid "Check the URL or return to the homepage." 475 msgstr "" 476 477 #: admin/admin-ajax.php:272 424 478 msgid "Unlock Your Website's True Potential!" 425 479 msgstr "" 426 480 427 #: admin/admin-ajax.php:2 61481 #: admin/admin-ajax.php:273 428 482 msgid "" 429 483 "Imagine knowing exactly what makes your content shine and how to connect " … … 433 487 msgstr "" 434 488 435 #: admin/admin-ajax.php:2 62admin/includes/templates/go-pro.php:301489 #: admin/admin-ajax.php:274 admin/includes/templates/go-pro.php:301 436 490 msgid "Get Started" 437 491 msgstr "" 438 492 439 #: admin/admin-ajax.php:2 63493 #: admin/admin-ajax.php:275 440 494 msgid "Discover More" 441 495 msgstr "" 442 496 443 #: admin/admin-ajax.php:2 66497 #: admin/admin-ajax.php:278 444 498 msgid "{{count}} {{interval}} ago" 445 499 msgstr "" 446 500 447 #: admin/admin-ajax.php:2 67501 #: admin/admin-ajax.php:279 448 502 msgid "year" 449 503 msgstr "" 450 504 451 #: admin/admin-ajax.php:2 68505 #: admin/admin-ajax.php:280 452 506 msgid "years" 453 507 msgstr "" 454 508 455 #: admin/admin-ajax.php:2 69509 #: admin/admin-ajax.php:281 456 510 msgid "month" 457 511 msgstr "" 458 512 459 #: admin/admin-ajax.php:2 70513 #: admin/admin-ajax.php:282 460 514 msgid "months" 461 515 msgstr "" 462 516 463 #: admin/admin-ajax.php:2 71517 #: admin/admin-ajax.php:283 464 518 msgid "week" 465 519 msgstr "" 466 520 467 #: admin/admin-ajax.php:2 72521 #: admin/admin-ajax.php:284 468 522 msgid "weeks" 469 523 msgstr "" 470 524 471 #: admin/admin-ajax.php:2 73525 #: admin/admin-ajax.php:285 472 526 msgid "day" 473 527 msgstr "" 474 528 475 #: admin/admin-ajax.php:2 74529 #: admin/admin-ajax.php:286 476 530 msgid "days" 477 531 msgstr "" 478 532 479 #: admin/admin-ajax.php:2 75533 #: admin/admin-ajax.php:287 480 534 msgid "hour" 481 535 msgstr "" 482 536 483 #: admin/admin-ajax.php:2 76537 #: admin/admin-ajax.php:288 484 538 msgid "hours" 485 539 msgstr "" 486 540 487 #: admin/admin-ajax.php:2 77541 #: admin/admin-ajax.php:289 488 542 msgid "minute" 489 543 msgstr "" 490 544 491 #: admin/admin-ajax.php:2 78545 #: admin/admin-ajax.php:290 492 546 msgid "minutes" 493 547 msgstr "" 494 548 495 #: admin/admin-ajax.php:2 79549 #: admin/admin-ajax.php:291 496 550 msgid "second" 497 551 msgstr "" 498 552 499 #: admin/admin-ajax.php:2 80553 #: admin/admin-ajax.php:292 500 554 msgid "seconds" 501 555 msgstr "" 502 556 503 #: admin/admin-ajax.php:2 81557 #: admin/admin-ajax.php:293 504 558 msgid "just now" 505 559 msgstr "" … … 519 573 msgstr "" 520 574 521 #: admin/admin-hooks.php:1 47575 #: admin/admin-hooks.php:138 522 576 msgid "Wow! You've hit an amazing milestone!" 523 577 msgstr "" 524 578 579 #: admin/admin-hooks.php:141 580 msgid "Fantastic! Your community is really engaged!" 581 msgstr "" 582 583 #: admin/admin-hooks.php:144 584 msgid "Awesome! You're building something great!" 585 msgstr "" 586 525 587 #: admin/admin-hooks.php:150 526 msgid "Fantastic! Your community is really engaged!"527 msgstr ""528 529 #: admin/admin-hooks.php:153530 msgid "Awesome! You're building something great!"531 msgstr ""532 533 #: admin/admin-hooks.php:159534 588 msgid "Your Community Loves WP ULike! ⭐" 535 589 msgstr "" 536 590 537 #: admin/admin-hooks.php:1 61591 #: admin/admin-hooks.php:152 538 592 msgid "" 539 593 "You've received %s likes from your community — that's incredible! Your " … … 544 598 msgstr "" 545 599 546 #: admin/admin-hooks.php:1 70600 #: admin/admin-hooks.php:161 547 601 msgid "⭐ Share My Experience" 548 602 msgstr "" 549 603 550 #: admin/admin-hooks.php:1 75 admin/admin-hooks.php:264551 #: admin/admin-hooks.php:3 22604 #: admin/admin-hooks.php:166 admin/admin-hooks.php:255 605 #: admin/admin-hooks.php:313 552 606 msgid "Maybe Later" 553 607 msgstr "" 554 608 555 #: admin/admin-hooks.php:1 81 admin/admin-hooks.php:328609 #: admin/admin-hooks.php:172 admin/admin-hooks.php:319 556 610 msgid "Don't Ask Again" 557 611 msgstr "" 558 612 613 #: admin/admin-hooks.php:214 614 msgid "Your license has expired" 615 msgstr "" 616 617 #: admin/admin-hooks.php:217 618 msgid "Your license has been disabled" 619 msgstr "" 620 621 #: admin/admin-hooks.php:220 admin/admin-hooks.php:226 622 msgid "Your license needs attention" 623 msgstr "" 624 559 625 #: admin/admin-hooks.php:223 560 msgid "Your license has expired" 561 msgstr "" 562 563 #: admin/admin-hooks.php:226 564 msgid "Your license has been disabled" 565 msgstr "" 566 567 #: admin/admin-hooks.php:229 admin/admin-hooks.php:235 568 msgid "Your license needs attention" 626 msgid "Unable to verify your license" 569 627 msgstr "" 570 628 571 629 #: admin/admin-hooks.php:232 572 msgid "Unable to verify your license"573 msgstr ""574 575 #: admin/admin-hooks.php:241576 630 msgid "Special Offer: Save %s on WP ULike Pro! 🎁" 577 631 msgstr "" 578 632 579 #: admin/admin-hooks.php:2 45633 #: admin/admin-hooks.php:236 580 634 msgid "" 581 635 "We noticed your license needs a quick update. Here's some great news — we " … … 585 639 msgstr "" 586 640 587 #: admin/admin-hooks.php:2 57641 #: admin/admin-hooks.php:248 588 642 msgid "🎉 Claim My %s Discount" 589 643 msgstr "" 590 644 591 #: admin/admin-hooks.php:3 11645 #: admin/admin-hooks.php:302 592 646 msgid "Create Beautiful User Profiles Your Community Will Love! 🎨" 593 647 msgstr "" 594 648 595 #: admin/admin-hooks.php:3 12649 #: admin/admin-hooks.php:303 596 650 msgid "" 597 651 "Want to take your community engagement to the next level? With WP ULike " … … 602 656 msgstr "" 603 657 604 #: admin/admin-hooks.php:3 17658 #: admin/admin-hooks.php:308 605 659 msgid "✨ Discover Profile Builder" 606 660 msgstr "" 607 661 608 #: admin/admin-hooks.php:3 68admin/includes/templates/about.php:45662 #: admin/admin-hooks.php:359 admin/includes/templates/about.php:45 609 663 msgid "Go Pro" 610 664 msgstr "" 611 665 612 #: admin/admin-hooks.php:36 9666 #: admin/admin-hooks.php:360 613 667 msgid "Upgrade" 614 668 msgstr "" 615 669 616 #: admin/admin-hooks.php:7 56670 #: admin/admin-hooks.php:747 617 671 msgid "PHP Snippets" 618 672 msgstr "" 619 673 620 #: admin/admin-hooks.php:7 58674 #: admin/admin-hooks.php:749 621 675 msgid "" 622 676 "Add PHP snippets without opening and closing tags (<?php and ?>). If " … … 625 679 msgstr "" 626 680 627 #: admin/admin-hooks.php:7 67681 #: admin/admin-hooks.php:758 628 682 msgid "Javascript Snippets" 629 683 msgstr "" 630 684 631 #: admin/admin-hooks.php:76 9685 #: admin/admin-hooks.php:760 632 686 msgid "" 633 687 "This code will output immediately before the closing </body> tag in " … … 636 690 msgstr "" 637 691 638 #: admin/classes/class-wp-ulike-admin-pages.php:27 includes/plugin.php:1 14692 #: admin/classes/class-wp-ulike-admin-pages.php:27 includes/plugin.php:125 639 693 msgid "Statistics" 640 694 msgstr "" 641 695 642 696 #: admin/classes/class-wp-ulike-admin-pages.php:35 643 #: admin/includes/templates/about.php:29 includes/plugin.php:1 15697 #: admin/includes/templates/about.php:29 includes/plugin.php:126 644 698 msgid "About" 645 699 msgstr "" … … 649 703 msgstr "" 650 704 651 #: admin/classes/class-wp-ulike-admin-panel.php:43 includes/plugin.php:1 13705 #: admin/classes/class-wp-ulike-admin-panel.php:43 includes/plugin.php:124 652 706 msgid "Settings" 653 707 msgstr "" … … 925 979 #: admin/classes/class-wp-ulike-admin-panel.php:422 926 980 #: admin/classes/class-wp-ulike-widget.php:293 927 #: admin/classes/class-wp-ulike-widget.php:5 83981 #: admin/classes/class-wp-ulike-widget.php:577 928 982 msgid "BuddyPress" 929 983 msgstr "" … … 1572 1626 1573 1627 #: admin/classes/class-wp-ulike-logs.php:173 1574 #: admin/classes/class-wp-ulike-stats.php: 2721628 #: admin/classes/class-wp-ulike-stats.php:303 1575 1629 msgid "Guest User" 1576 1630 msgstr "" … … 1634 1688 msgstr "" 1635 1689 1636 #: admin/classes/class-wp-ulike-widget.php:51 81690 #: admin/classes/class-wp-ulike-widget.php:512 1637 1691 msgid "Most Liked" 1638 1692 msgstr "" 1639 1693 1640 #: admin/classes/class-wp-ulike-widget.php:5 331694 #: admin/classes/class-wp-ulike-widget.php:527 1641 1695 msgid "Title:" 1642 1696 msgstr "" 1643 1697 1698 #: admin/classes/class-wp-ulike-widget.php:532 1699 msgid "Type:" 1700 msgstr "" 1701 1702 #: admin/classes/class-wp-ulike-widget.php:534 1703 msgid "Most Liked Posts" 1704 msgstr "" 1705 1706 #: admin/classes/class-wp-ulike-widget.php:535 1707 msgid "Most Liked Comments" 1708 msgstr "" 1709 1710 #: admin/classes/class-wp-ulike-widget.php:536 1711 msgid "Most Liked Activities" 1712 msgstr "" 1713 1714 #: admin/classes/class-wp-ulike-widget.php:537 1715 msgid "Most Liked Topics" 1716 msgstr "" 1717 1644 1718 #: admin/classes/class-wp-ulike-widget.php:538 1645 msgid "Type:" 1646 msgstr "" 1647 1648 #: admin/classes/class-wp-ulike-widget.php:540 1649 msgid "Most Liked Posts" 1650 msgstr "" 1651 1652 #: admin/classes/class-wp-ulike-widget.php:541 1653 msgid "Most Liked Comments" 1654 msgstr "" 1655 1656 #: admin/classes/class-wp-ulike-widget.php:542 1657 msgid "Most Liked Activities" 1658 msgstr "" 1659 1660 #: admin/classes/class-wp-ulike-widget.php:543 1661 msgid "Most Liked Topics" 1719 msgid "Most Liked Users" 1720 msgstr "" 1721 1722 #: admin/classes/class-wp-ulike-widget.php:539 1723 msgid "Last Posts Liked By User" 1662 1724 msgstr "" 1663 1725 1664 1726 #: admin/classes/class-wp-ulike-widget.php:544 1665 msgid "Most Liked Users"1666 msgstr ""1667 1668 #: admin/classes/class-wp-ulike-widget.php:5451669 msgid "Last Posts Liked By User"1670 msgstr ""1671 1672 #: admin/classes/class-wp-ulike-widget.php:5501673 1727 msgid "Number of items to show:" 1674 1728 msgstr "" 1675 1729 1730 #: admin/classes/class-wp-ulike-widget.php:549 1731 msgid "Period:" 1732 msgstr "" 1733 1734 #: admin/classes/class-wp-ulike-widget.php:551 1735 msgid "All The Times" 1736 msgstr "" 1737 1738 #: admin/classes/class-wp-ulike-widget.php:552 1739 msgid "Year" 1740 msgstr "" 1741 1742 #: admin/classes/class-wp-ulike-widget.php:553 1743 msgid "Month" 1744 msgstr "" 1745 1746 #: admin/classes/class-wp-ulike-widget.php:554 1747 msgid "Week" 1748 msgstr "" 1749 1676 1750 #: admin/classes/class-wp-ulike-widget.php:555 1677 msgid "Period:" 1678 msgstr "" 1679 1680 #: admin/classes/class-wp-ulike-widget.php:557 1681 msgid "All The Times" 1682 msgstr "" 1683 1684 #: admin/classes/class-wp-ulike-widget.php:558 1685 msgid "Year" 1686 msgstr "" 1687 1688 #: admin/classes/class-wp-ulike-widget.php:559 1689 msgid "Month" 1690 msgstr "" 1691 1692 #: admin/classes/class-wp-ulike-widget.php:560 1693 msgid "Week" 1751 msgid "Yesterday" 1752 msgstr "" 1753 1754 #: admin/classes/class-wp-ulike-widget.php:556 1755 msgid "Today" 1694 1756 msgstr "" 1695 1757 1696 1758 #: admin/classes/class-wp-ulike-widget.php:561 1697 msgid "Yesterday"1698 msgstr ""1699 1700 #: admin/classes/class-wp-ulike-widget.php:5621701 msgid "Today"1702 msgstr ""1703 1704 #: admin/classes/class-wp-ulike-widget.php:5671705 1759 msgid "Style:" 1706 1760 msgstr "" 1707 1761 1708 #: admin/classes/class-wp-ulike-widget.php:569 1762 #: admin/classes/class-wp-ulike-widget.php:563 1763 #: includes/functions/templates.php:23 1709 1764 msgid "Simple" 1710 1765 msgstr "" 1711 1766 1712 #: admin/classes/class-wp-ulike-widget.php:5 701767 #: admin/classes/class-wp-ulike-widget.php:564 1713 1768 #: includes/functions/templates.php:29 1714 1769 msgid "Heart" 1715 1770 msgstr "" 1716 1771 1772 #: admin/classes/class-wp-ulike-widget.php:569 1773 msgid "Title Trim (Length):" 1774 msgstr "" 1775 1717 1776 #: admin/classes/class-wp-ulike-widget.php:575 1718 msgid "Title Trim (Length):"1719 msgstr ""1720 1721 #: admin/classes/class-wp-ulike-widget.php:5811722 1777 msgid "Profile URL:" 1723 1778 msgstr "" 1724 1779 1780 #: admin/classes/class-wp-ulike-widget.php:578 1781 msgid "UltimateMember" 1782 msgstr "" 1783 1725 1784 #: admin/classes/class-wp-ulike-widget.php:584 1726 msgid "UltimateMember"1727 msgstr ""1728 1729 #: admin/classes/class-wp-ulike-widget.php:5901730 1785 msgid "Activate Like Counter" 1731 1786 msgstr "" 1732 1787 1733 #: admin/classes/class-wp-ulike-widget.php:5 951788 #: admin/classes/class-wp-ulike-widget.php:589 1734 1789 msgid "Activate Thumbnail/Avatar" 1735 1790 msgstr "" 1736 1791 1737 #: admin/classes/class-wp-ulike-widget.php:59 91792 #: admin/classes/class-wp-ulike-widget.php:593 1738 1793 msgid "Thumbnail/Avatar size:" 1739 1794 msgstr "" … … 2199 2254 #: admin/includes/templates/go-pro.php:297 2200 2255 msgid "Contact Support" 2256 msgstr "" 2257 2258 #: includes/blocks/index.php:407 2259 msgid "Use Settings Default" 2260 msgstr "" 2261 2262 #: includes/blocks/index.php:409 2263 msgid "Use Settings Default (%s)" 2201 2264 msgstr "" 2202 2265 … … 2453 2516 msgstr "" 2454 2517 2455 #: includes/functions/templates.php:232456 msgid "Default"2457 msgstr ""2458 2459 2518 #: includes/functions/templates.php:35 2460 2519 msgid "Twitter Heart" -
wp-ulike/trunk/readme.txt
r3412215 r3428591 1 === WP ULike - Turn Visitors into Engaged Fans===1 === WP ULike - Engagement Analytics & Interactive Buttons to Understand Your Audience === 2 2 Contributors: alimir 3 3 Donate link: https://wpulike.com/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme … … 7 7 Requires at least: 6.0 8 8 Tested up to: 6.9 9 Stable tag: 4.8. 29 Stable tag: 4.8.3 10 10 License: GPLv2 or later 11 11 License URI: http://www.gnu.org/licenses/gpl-2.0.html 12 12 13 Add Like buttons to your content and discover what your audience loves with real-time analytics. Turn visitors into engaged fans.13 Like & Dislike buttons with real-time analytics. Track engagement and understand what your audience loves across posts, products, and comments. 14 14 15 15 == Description == 16 16 17 **Turn Visitors into Engaged Fans!** 18 19 We built WP ULike because we know how frustrating it can be when visitors browse your site but don't engage. You create amazing content, but how do you know what resonates? That's where we come in. 20 21 WP ULike helps you understand your audience by making engagement effortless. With one simple click, visitors can show their appreciation, and you get valuable insights into what content drives real engagement. It's not just about likes—it's about building a community that tells you what they want more of. (Want Dislike buttons too? That's available in Pro!) 17 = THE #1 WORDPRESS ENGAGEMENT ANALYTICS PLUGIN, TURN VISITORS INTO INSIGHTS INSTANTLY = 18 19 You're creating great content, but you're flying blind. Sound familiar? You don't know which posts hit, which products people love, or what's actually resonating with your visitors. Comments are great, but most people don't comment. They just consume and move on. 20 21 [WP ULike](https://wpulike.com/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) fixes that. Get instant feedback on what your audience loves. No registration, no friction, no barriers. Just one click tells you exactly what's working. 22 23 = Here's How It Works = 24 25 Activate the plugin, and Like buttons automatically appear on your posts, comments, WooCommerce products, BuddyPress (BuddyBoss) activities, and bbPress topics. Zero setup. Zero configuration. It just works. 26 27 Every interaction gets tracked in real-time. You'll see which content gets the most love, when people engage, and how engagement trends over time. No more guessing—you'll know exactly what your audience wants more of. 28 29 The analytics dashboard shows you the full picture: your top-performing content, voting statistics, engagement trends, and detailed logs. It's like having a focus group that never stops giving you feedback. 30 31 And here's what we're proud of: it's all privacy-safe. GDPR compliant with IP anonymization. We don't store personal data—just the engagement metrics that help you make better decisions. 32 33 = The Three Things That Matter = 34 35 **Instant Engagement:** Interactive buttons that work everywhere. No barriers, no registration required (though you can restrict to logged-in users if needed). Just pure, simple engagement. 36 37 **Real Insights:** A dashboard that shows you what's actually working. Not vanity metrics—real data about what content drives engagement. 38 39 **Privacy First:** Built with privacy in mind from day one. We respect your visitors because that's the right thing to do. 22 40 23 41 [youtube https://www.youtube.com/watch?v=nxQto2Yj_yc] 24 42 25 **Who Is This For?** 26 27 Whether you're running a blog, an online store, a community forum, or a content site, WP ULike helps you: 28 29 * **Content Creators & Bloggers** – Discover which posts your readers love most and create more of what works 30 * **WooCommerce Store Owners** – See which products get the most appreciation and understand customer preferences 31 * **Community Managers** – Track engagement across BuddyPress activities and bbPress topics to foster better discussions 32 * **Business Owners** – Get instant feedback on your content without waiting for comments or complex surveys 33 * **Marketers** – Make data-driven decisions about your content strategy with real engagement metrics 34 35 **What Problems Does WP ULike Solve?** 36 37 We've talked to thousands of website owners, and here are the challenges we help you overcome: 38 39 **Low User Engagement** – Visitors can quickly show appreciation with one click, increasing interaction and time spent on your site. No barriers, no friction—just instant engagement. 40 41 **No Content Insights** – Track which content performs best with detailed statistics and analytics. Stop guessing what works and start knowing what your audience loves. 42 43 **Limited User Feedback** – Get instant feedback from your audience without requiring comments or complex forms. Sometimes a simple like says everything. 44 45 **Slow Website Performance** – Built with vanilla JavaScript (no jQuery), optimized for speed and fully compatible with caching plugins. Your site stays fast, your users stay happy. 46 47 **Privacy Concerns** – GDPR compliant with IP anonymization. No personal data stored, respecting user privacy while still providing valuable insights. 48 49 **Content Type Limitations** – Works seamlessly with posts, comments, WooCommerce products, BuddyPress activities, bbPress topics, and more. One plugin, unlimited possibilities. 50 51 **Everything You Need to Succeed (Free Version)** 52 53 The free version of WP ULike gives you everything you need to start building engagement today. We believe in providing real value, not just a teaser: 54 55 ✨ **Like Buttons** – Add Like buttons to posts, comments, WooCommerce products, BuddyPress activities, and bbPress topics. Your visitors can engage with any content type you have. 56 57 📊 **Real-Time Statistics Dashboard** – Track engagement with detailed analytics and see your most popular content. Know what's working and what's not, in real-time. 58 59 🎨 **Customizable Templates** – Multiple button styles to match your website design perfectly. Make it yours without writing a single line of code. 60 61 ⚡ **Fast & Lightweight** – Vanilla JavaScript (no jQuery), optimized for speed and performance. Your site stays fast, your users stay engaged. 62 63 🔒 **GDPR Ready** – IP anonymization, no personal data stored. We respect privacy because we know it matters to you and your visitors. 64 65 📱 **Full RTL Support** – Complete right-to-left language support for Arabic, Hebrew, and other RTL languages. Everyone deserves a great experience. 66 67 🔌 **Seamless Integrations** – Works beautifully with WooCommerce, BuddyPress, bbPress, Elementor, myCRED, and more. It just works, no matter your setup. 68 69 🎯 **Zero Configuration** – No coding required, works out of the box. Install, activate, and start engaging your audience in seconds. 70 71 📈 **Auto Display & Shortcodes** – Automatically adds buttons to your content, or use shortcodes for manual placement. You're in complete control. 72 73 **Why 80,000+ Websites Trust WP ULike** 74 75 We're not just another plugin—we're a team that cares about your success: 76 77 * **We Listen** – Every feature we build comes from real user feedback. Your challenges become our priorities. 78 * **We Perform** – Built for speed, tested with all major caching plugins. Your site's performance is our performance. 79 * **We Protect** – Security and privacy aren't afterthoughts—they're built into everything we do. 80 * **We Improve** – Regular updates with new features and improvements. We're always making it better. 81 82 **WP ULike Pro – When You're Ready to Go Further** 83 84 The free version gives you everything you need to build engagement and understand your audience. It's complete, powerful, and ready to use right now. 85 86 When you're ready to take your engagement to the next level, WP ULike Pro extends your capabilities with professional-grade features designed for growing businesses and serious content creators: 87 88 👍 **Dislike Buttons** – Add Dislike buttons alongside Like buttons to get more nuanced feedback from your audience. Understand what content doesn't resonate, not just what does. 89 90 🚀 **Advanced Analytics** – Deep insights with filters, date ranges, and exportable reports. Make data-driven decisions with confidence. 91 92 🎨 **Premium Templates** – 25+ professionally designed button styles. Stand out with beautiful, unique designs. 93 94 👤 **User Profiles** – Personalized profiles showing user likes and activity. Build a community around engagement. 95 96 🔑 **Login/Registration Forms** – Beautiful, AJAX-powered forms with social login. Turn engaged visitors into registered members. 97 98 📢 **Social Sharing** – One-click sharing to boost your content reach. Let your engaged audience become your marketing team. 99 100 ⚡ **SEO Schema** – Structured data to improve search rankings. Get found by more people who love your content. 101 102 📡 **REST API** – Full API access for custom integrations. Build exactly what you need. 103 104 🎯 **Elementor Widgets** – Drag-and-drop widgets for Elementor page builder. Design engagement into your pages. 105 106 Think of Pro as your growth partner—when you're ready to scale, we're ready to help. 43 = Who Actually Uses This? = 44 45 We've been doing this for years, and we've seen who gets the most value: 46 47 **Bloggers and content creators:** Stop writing in the dark. See which posts actually resonate. 48 49 **WooCommerce store owners:** Understand customer preferences. See which products get appreciation, not just views. 50 51 **Community managers:** Track engagement across BuddyPress and bbPress forums to foster better discussions. 52 53 **Business owners:** Get instant feedback without waiting for comments or running surveys. 54 55 **Marketers:** Make decisions based on data, not hunches. Get real engagement metrics. 56 57 = The Problems We Actually Solve = 58 59 **Low engagement?** We fix that. Interactive buttons with zero friction. No registration required—visitors just click and go. 60 61 **Flying blind on what works?** Not anymore. See exactly which posts, products, or activities perform best. Real statistics, real-time data. 62 63 **Privacy concerns?** We get it. GDPR compliant with IP anonymization. No personal data stored—just the metrics you need. 64 65 **Worried about speed?** Don't be. Vanilla JavaScript (no jQuery), optimized for performance, compatible with every major caching plugin. 66 67 **Need it to work everywhere?** It does. Posts, comments, WooCommerce products, BuddyPress activities, bbPress topics—one plugin handles it all. 68 69 = What You Get (Free Version) = 70 71 We believe in giving you real value, not a teaser. The free version includes everything you need to build engagement and understand your audience: 72 73 **Like Buttons Everywhere:** Auto-display on posts, comments, WooCommerce products, BuddyPress activities, and bbPress topics. Or drop them anywhere with the `[wp_ulike]` shortcode. Your choice. 74 75 **Analytics That Matter:** A real-time dashboard showing your most popular content, voting statistics, engagement trends, and detailed logs. This isn't fluff—it's actionable data. 76 77 **Templates You Can Customize:** Multiple button styles that actually look good. Match your site's design, customize colors and text, all through the settings panel. No coding required. 78 79 **Built for Speed:** Vanilla JavaScript (no jQuery), optimized for performance, compatible with every major caching plugin. Your site won't slow down. 80 81 **Accessibility & RTL Support:** Full RTL support for Arabic, Hebrew, and other right-to-left languages. We built this right. 82 83 **The Extras:** Gutenberg block support, shortcodes, auto-display options, and seamless integrations with WooCommerce, BuddyPress, bbPress, Elementor, myCRED, and more. It just works. 84 85 = Why 80,000+ Sites Use This = 86 87 We're not a faceless corporation. We're a team that actually cares about your success. 88 89 Every feature we build comes from real user feedback. You ask, we listen, we build. That's how we've grown from a simple idea to powering over 80,000 websites. 90 91 We test everything with major caching plugins because your site's performance matters. We built this to be fast, and we keep it that way. 92 93 Security and privacy aren't afterthoughts—they're built into everything we do. We follow WordPress best practices because your site's security matters. 94 95 And we keep improving. Regular updates, new features, bug fixes. We're in this for the long haul, and we're committed to making this better every single day. 96 97 = WP ULike Pro: When You're Ready to Scale = 98 99 The free version gets you started. It's complete, powerful, and ready to use right now. But when you're ready to take engagement to the next level, Pro adds the features that serious businesses need: 100 101 **Dislike Buttons:** Get the full picture. Sometimes you need to know what doesn't resonate, not just what does. 102 103 **View Tracking & Engagement Rates:** Track views and calculate real engagement rates (Likes + Dislikes / Views * 100). This is the metric that actually matters. 104 105 **Advanced Analytics:** Deep insights with filters, date ranges, world map visualization, device analytics, and exportable reports. Export to CSV, PNG, or SVG for presentations and analysis. 106 107 **Premium Templates & User Profiles:** 25+ professionally designed button styles that actually stand out. Plus Instagram-inspired user profiles that turn engaged visitors into community members. 108 109 **Login/Registration & Social Sharing:** Beautiful AJAX-powered forms with social login integration. Turn engagement into registered users. One-click sharing to amplify your reach. 110 111 **SEO Schema, REST API & Elementor Widgets:** Structured data for better search rankings. Full REST API for custom integrations. Drag-and-drop Elementor widgets for visual page building. 112 113 Think of Pro as your growth partner. When you're ready to scale, we're here to help you get there. 107 114 108 115 [See the full comparison](https://wpulike.com/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) | [View Templates](https://wpulike.com/templates/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) | [Documentation](https://docs.wpulike.com/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) … … 110 117 == Installation == 111 118 112 Getting started with WP ULike is quick and easy. Here's what you need to know:119 Getting started takes about two minutes. Here's what you need: 113 120 114 121 = Minimum Requirements = … … 128 135 = Installation = 129 136 130 Installing WP ULike takes just a couple of minutes: 131 132 1. ** Via WordPress Admin** (Easiest): Go to Plugins → Add New, search for "WP ULike", and click Install Now. Then clickActivate.133 134 2. **Manual Installation**: Download the plugin, unzip it, and upload the folder to your `wp-content/plugins/` directory. Then activate it through the Plugins menu in WordPress.135 136 That's it! Once activated, WP ULike will automatically start working. The buttons will appear on your posts, and you can customize everything from the settings panel.137 138 ** Need Help?** We've got you covered. Visit our [Knowledge Base](https://docs.wpulike.com/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) for detailed guides, or reach out to our support team if you run into any issues. We're here to help!137 **Installation Steps:** 138 139 1. **WordPress Admin** (Recommended): Go to Plugins → Add New, search for "WP ULike", click Install Now, then Activate. 140 141 2. **Manual Installation**: Download, unzip, upload to `wp-content/plugins/`, then activate through your Plugins menu. 142 143 That's literally it. Once activated, Like buttons appear on your posts immediately. No configuration needed. If you want to customize templates, colors, or settings, head to **WP ULike → Settings** in your WordPress admin. 144 145 **Stuck?** We've got you. Check our [Knowledge Base](https://docs.wpulike.com/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) for detailed guides, or reach out to support. We actually respond. 139 146 140 147 == Screenshots == 141 148 142 1. **Like Button Templates** – Choose from multiple beautiful button templates that match your site's design. Customize colors, styles, and text to make engagement buttons that feel native to your brand. 143 144 2. **Metrics Dashboard (Stats Panel)** – See your engagement at a glance with a powerful analytics dashboard. Track voting statistics, engagement trends, and understand what content resonates with your audience. 145 146 3. **Top Trends & Insights (Stats Panel)** – Discover your top-performing content with visual breakdowns and engagement insights. Make data-driven decisions about what to create next. 147 148 4. **Engagement Logs (Stats Panel)** – Keep track of every interaction with comprehensive logs. See who's engaging, when they're engaging, and what they're engaging with. 149 150 5. **Elementor Widgets** – Drag and drop engagement widgets directly into your Elementor pages. Build beautiful, engaging pages without touching code. 151 152 6. **Customizer Panel** – Fine-tune every aspect of your voting buttons with flexible customization options. Make it yours, your way. 149 1. **Like & Dislike Button Templates:** Multiple beautiful templates. Customize colors, styles, and text to match your brand. 150 151 2. **Engagement Metrics Dashboard:** Powerful analytics dashboard. Track voting statistics, engagement trends, and understand what resonates. 152 153 3. **Top Trends & Insights:** Discover your top-performing content with visual breakdowns. Make data-driven decisions. 154 155 4. **Gutenberg Block:** Add WP ULike buttons directly in the block editor with customizable templates and settings. 153 156 154 157 == Frequently Asked Questions == 155 158 156 159 = Do visitors need to register or login to like content? = 157 No t at all! We designed WP ULike to remove barriers to engagement. Visitors can like content immediately without any registration or login required. This means more engagement, more insights, and happier visitors. Of course, if you prefer to require login (maybe you want to build a registered community), you can easily enable that option in the settings. The choice is yours.160 Nope. One click, instant engagement. No registration required. If you want to build a registered community, you can require login in settings—but it's optional. 158 161 159 162 = Does WP ULike work with any theme? = 160 Yes! We built WP ULike to work seamlessly with any WordPress theme that follows coding standards. The buttons automatically adapt to your theme's styling, so they'll look great whether you're using a free theme from the repository or a premium theme from your favorite developer. If you ever notice any styling issues, just let us know—we're here to help. 161 162 = Is WP ULike compatible with other plugins? = 163 Absolutely! We know you're probably using other plugins, and we made sure WP ULike plays nicely with the most popular ones. It integrates seamlessly with Elementor, BuddyPress, bbPress, WooCommerce, GamiPress, myCRED, and most caching plugins. If you're using something we haven't tested yet and run into any issues, please reach out. We love making things work together. 164 165 = Does WP ULike work with caching plugins? = 166 Yes, and this was really important to us! We built WP ULike to be fully compatible with all major caching plugins including WP Rocket, W3 Total Cache, WP Super Cache, LiteSpeed Cache, and others. Your site's performance matters, so we optimized the plugin to work perfectly with cached content. You get engagement features without sacrificing speed. 163 Yes. It adapts to your theme automatically. Works with any WordPress theme that follows coding standards. If you run into styling issues, let us know and we'll help. 164 165 = Is WP ULike compatible with other plugins and caching? = 166 Absolutely. We've tested it with WooCommerce, BuddyPress, bbPress, Elementor, GamiPress, myCRED, and all major caching plugins (WP Rocket, W3 Total Cache, WP Super Cache, LiteSpeed Cache, and more). Your site will stay fast. 167 167 168 168 = Can I customize the button appearance? = 169 Of course! We want you to make it yours. WP ULike offers multiple built-in templates and styles, and you can customize colors, button text, and styling through the settings panel—no coding required. If you want to go further, you can use custom CSS to match your exact brand. And if you're looking for professionally designed, unique button styles, the Pro version includes 25+ premium templates that are ready to use.169 Yes. Multiple built-in templates and styles. Customize colors, text, and styling through the settings panel—no coding needed. Pro version includes 25+ premium templates if you want something more unique. 170 170 171 171 = What's the difference between WP ULike Free and Pro? = 172 Great question! The free version is complete and powerful—it includes everything you need: Like buttons, a real-time statistics dashboard, customizable templates, auto-display, shortcodes, and full plugin integrations. You can build engagement and understand your audience with the free version, no limitations. 173 174 WP ULike Pro is for when you're ready to take things further. It adds professional features like advanced analytics with filters and date ranges, premium templates, user profiles, login/registration forms, social sharing, SEO schema, and REST API access. Think of it this way: Free gets you everything you need to succeed. Pro helps you scale and grow even faster. 172 Free gives you everything you need: Like buttons (auto-display + shortcodes), real-time analytics dashboard, customizable templates, Gutenberg block support, and full integrations with WooCommerce, BuddyPress, bbPress, Elementor, and myCRED. Pro adds the growth features: Dislike buttons, advanced analytics with filters and date ranges, view tracking with engagement rates, 25+ premium templates, user profiles, login/registration forms, social sharing, SEO schema, REST API, and Elementor widgets. 175 173 176 174 = Can I use WP ULike on a multisite setup? = 177 Yes ! WP ULike works perfectly across WordPress multisite networks. Each site in your network can have its own settings and statistics, so you can manage engagement across all your sites while keeping everything organized. Perfect for agencies, networks, or anyone managing multiple WordPress sites.175 Yes. Works perfectly across WordPress multisite networks. Each site gets its own settings and statistics. 178 176 179 177 = Is WP ULike secure? = 180 Security is our top priority, and we take it seriously. WP ULike is developed by TechnoWich following WordPress security best practices and coding standards. We regularly audit our code, stay updated with security best practices, and respond quickly to any security concerns. With over 80,000 active installations and a high WordPress.org rating, you can trust that your site and your visitors' data are in good hands.178 Yes. We follow WordPress security best practices, regularly audit our code, and have over 80,000 active installations with a high WordPress.org rating. Security isn't optional for us—it's built in. 181 179 182 180 == Changelog == 181 182 = 4.8.3 = 183 * Added: Gutenberg block support for adding WP ULike buttons directly in the block editor with customizable templates and settings. 184 * Added: Introduced view tracking service for all content types with engagement rate calculation (Likes + Dislikes / Views * 100) and intelligent tracking using Intersection Observer API with batched requests. [PRO] 185 * Added: Added Growth column to WorldMap country statistics table for tracking country performance trends. [PRO] 186 * Added: Added comprehensive GDPR tools section with user search and bulk log removal functionality for compliance with data protection regulations. [PRO] 187 * Added: Introduced advanced bulk actions feature with various filters (post type, taxonomy, category, search, and item ID) for efficient content management. [PRO] 188 * Added: Redesigned user profile pages with Instagram-inspired layout, featuring improved visual hierarchy and modern aesthetics. [PRO] 189 * Added: Custom stylish avatar uploader with real-time preview and enhanced user experience. [PRO] 190 * Improved: Enhanced analytics dashboard UI and functionality with improved visualizations and user experience. 191 * Improved: Optimized database query performance by implementing index-friendly date range queries, eliminating slow query issues and improving response times for statistics and analytics. 192 * Fixed: Various minor bug fixes and improvements. 183 193 184 194 = 4.8.2 = -
wp-ulike/trunk/wp-ulike.php
r3412215 r3428591 4 4 * Plugin URI: https://wpulike.com/?utm_source=wp-plugins&utm_campaign=plugin-uri&utm_medium=wp-dash 5 5 * Description: Looking to increase user engagement on your WordPress site? WP ULike plugin lets you easily add voting buttons to your content. With customizable settings and detailed analytics, you can track user engagement, optimize your content, and build a loyal following. 6 * Version: 4.8. 26 * Version: 4.8.3 7 7 * Author: TechnoWich 8 8 * Author URI: https://technowich.com/?utm_source=wp-plugins&utm_campaign=author-uri&utm_medium=wp-dash … … 31 31 // Do not change these values 32 32 define( 'WP_ULIKE_PLUGIN_URI' , 'https://wpulike.com/' ); 33 define( 'WP_ULIKE_VERSION' , '4.8. 2' );33 define( 'WP_ULIKE_VERSION' , '4.8.3' ); 34 34 define( 'WP_ULIKE_DB_VERSION' , '2.4' ); 35 35 define( 'WP_ULIKE_SLUG' , 'wp-ulike' );
Note: See TracChangeset
for help on using the changeset viewer.