Plugin Directory

Changeset 3428591


Ignore:
Timestamp:
12/28/2025 12:32:11 PM (2 months ago)
Author:
alimir
Message:

Committing 4.8.3 to trunk

Location:
wp-ulike/trunk
Files:
11 added
3 deleted
16 edited

Legend:

Unmodified
Added
Removed
  • wp-ulike/trunk/admin/admin-ajax.php

    r3399008 r3428591  
    151151        'Other Countries'                                          => esc_html__( 'Other Countries', 'wp-ulike' ),
    152152        'for'                                                      => esc_html__( 'for', 'wp-ulike' ),
     153        'Growth'                                                   => esc_html__( 'Growth', 'wp-ulike' ),
    153154
    154155        // Filters
     
    191192        'Comments'      => esc_html__( 'Comments', 'wp-ulike' ),
    192193        'By'            => esc_html__( 'By', 'wp-ulike' ),
     194        'Views'         => esc_html__( 'Views', 'wp-ulike' ),
    193195
    194196        // History
     
    215217        'Filter by type:' => esc_html__( 'Filter by type:', 'wp-ulike' ),
    216218        'per page'        => esc_html__( 'per page', 'wp-ulike' ),
     219        'View all'        => esc_html__( 'View all', 'wp-ulike' ),
    217220
    218221        // Types
     
    223226        'Engagers'   => esc_html__('Engagers', 'wp-ulike'),
    224227
    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' ),
    228240
    229241        // Banners
  • wp-ulike/trunk/admin/classes/class-wp-ulike-stats.php

    r3406278 r3428591  
    171171         * @return String
    172172         */
    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    }
    204234
    205235        /**
  • wp-ulike/trunk/admin/classes/class-wp-ulike-widget.php

    r3215648 r3428591  
    437437         * @author          Alimir
    438438         * @since           2.4
     439         * @deprecated      4.8.3 Use wp_ulike_get_period_limit_sql() instead
    439440         * @return          String
    440441         */
    441442        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 : '';
    456450        }
    457451
  • wp-ulike/trunk/admin/includes/statistics/asset-manifest.json

    r3250832 r3428591  
    11{
    22  "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",
    55    "index.html": "/index.html"
    66  },
    77  "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"
    1010  ]
    1111}
  • wp-ulike/trunk/admin/settings/classes/shortcode-options.class.php

    r3109919 r3428591  
    255255    public static function once_editor_setup() {
    256256
    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      // }
    260262
    261263      if ( ulf_wp_editor_api() ) {
  • wp-ulike/trunk/assets/js/wp-ulike.js

    r3412215 r3428591  
    1 /*! WP ULike - v4.8.2
     1/*! WP ULike - v4.8.3
    22 *  https://wpulike.com
    33 *  TechnoWich 2025;
  • wp-ulike/trunk/includes/classes/class-wp-ulike-activator.php

    r3406278 r3428591  
    103103
    104104        // Posts table
    105         maybe_create_table( $posts, "CREATE TABLE `{$posts}` (
     105        if ( ! $this->table_exists( $posts ) ) {
     106            maybe_create_table( $posts, "CREATE TABLE `{$posts}` (
    106107            `id` bigint(20) NOT NULL AUTO_INCREMENT,
    107108            `post_id` bigint(20) NOT NULL,
     
    125126            KEY `post_id_date_time_user_id_status` (`post_id`, `date_time`, `user_id`, `status`)
    126127        ) $charset_collate AUTO_INCREMENT=1;" );
     128        }
    127129
    128130        // Comments table
    129         maybe_create_table( $comments, "CREATE TABLE `{$comments}` (
     131        if ( ! $this->table_exists( $comments ) ) {
     132            maybe_create_table( $comments, "CREATE TABLE `{$comments}` (
    130133            `id` bigint(20) NOT NULL AUTO_INCREMENT,
    131134            `comment_id` bigint(20) NOT NULL,
     
    149152            KEY `comment_id_date_time_user_id_status` (`comment_id`, `date_time`, `user_id`, `status`)
    150153        ) $charset_collate AUTO_INCREMENT=1;" );
     154        }
    151155
    152156        // Activities table
    153         maybe_create_table( $activities, "CREATE TABLE `{$activities}` (
     157        if ( ! $this->table_exists( $activities ) ) {
     158            maybe_create_table( $activities, "CREATE TABLE `{$activities}` (
    154159            `id` bigint(20) NOT NULL AUTO_INCREMENT,
    155160            `activity_id` bigint(20) NOT NULL,
     
    173178            KEY `activity_id_date_time_user_id_status` (`activity_id`, `date_time`, `user_id`, `status`)
    174179        ) $charset_collate AUTO_INCREMENT=1;" );
     180        }
    175181
    176182        // Forums table
    177         maybe_create_table( $forums, "CREATE TABLE `{$forums}` (
     183        if ( ! $this->table_exists( $forums ) ) {
     184            maybe_create_table( $forums, "CREATE TABLE `{$forums}` (
    178185            `id` bigint(20) NOT NULL AUTO_INCREMENT,
    179186            `topic_id` bigint(20) NOT NULL,
     
    197204            KEY `topic_id_date_time_user_id_status` (`topic_id`, `date_time`, `user_id`, `status`)
    198205        ) $charset_collate AUTO_INCREMENT=1;" );
    199 
     206        }
    200207
    201208        // 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}` (
    203211            `meta_id` bigint(20) unsigned NOT NULL auto_increment,
    204212            `item_id` bigint(20) unsigned NOT NULL default '0',
     
    212220            KEY `meta_group_meta_key_item_id` (`meta_group`, `meta_key`, `item_id`)
    213221        ) $charset_collate AUTO_INCREMENT=1;" );
     222        }
    214223
    215224        // Update db version.
     
    217226            update_option( 'wp_ulike_dbVersion', WP_ULIKE_DB_VERSION );
    218227        }
     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;
    219245    }
    220246
  • wp-ulike/trunk/includes/classes/class-wp-ulike-frontend-assets.php

    r3399008 r3428591  
    6868         */
    6969        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', '>=' ) ){
    7272                return;
    7373            }
  • wp-ulike/trunk/includes/functions/queries.php

    r3406278 r3428591  
    511511        $column_name = $parsed_args['settings']->getColumnName();
    512512
     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
    513519        $query = $wpdb->prepare( "
    514520            SELECT COUNT(*)
     
    516522            WHERE `$column_name` = %s
    517523            AND `user_id` = %d
    518             AND DATE(date_time) = CURDATE()",
     524            AND date_time >= %s
     525            AND date_time <= %s",
    519526            $parsed_args['item_id'],
    520             $parsed_args['current_user']
     527            $parsed_args['current_user'],
     528            $today_start,
     529            $today_end
    521530        );
    522531
  • wp-ulike/trunk/includes/functions/templates.php

    r3215648 r3428591  
    2424        $default = array(
    2525            'wpulike-default' => array(
    26                 'name'            => esc_html__('Default', 'wp-ulike'),
     26                'name'            => esc_html__('Simple', 'wp-ulike'),
    2727                'callback'        => 'wp_ulike_set_default_template',
    2828                'symbol'          => WP_ULIKE_ASSETS_URL . '/img/svg/default.svg',
  • wp-ulike/trunk/includes/functions/utilities.php

    r3406278 r3428591  
    279279        $period_limit = '';
    280280
     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
    281287        if( is_array( $date_range ) ){
     288            // Interval-based range (e.g., last 30 days)
    282289            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
    285295                $period_limit = $wpdb->prepare(
    286296                    " 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
    291305                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';
    293307                } 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 );
    299312                }
     313
     314                $period_limit = $wpdb->prepare(
     315                    ' AND date_time >= %s AND date_time <= %s',
     316                    $start_date,
     317                    $end_date
     318                );
    300319            }
    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;
    331406        }
    332407
  • wp-ulike/trunk/includes/index.php

    r3215648 r3428591  
    3232include_once( 'hooks/shortcodes.php' );
    3333include_once( 'hooks/third-party.php' );
     34
     35// Blocks
     36include_once( 'blocks/index.php' );
  • wp-ulike/trunk/includes/plugin.php

    r3406278 r3428591  
    232232   */
    233233  public static function is_rest() {
    234     return defined( 'REST_REQUEST' );
     234    return defined( 'REST_REQUEST' ) && REST_REQUEST;
    235235  }
    236236
  • wp-ulike/trunk/languages/wp-ulike.pot

    r3406278 r3428591  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: WP ULike 4.8.1\n"
     5"Project-Id-Version: WP ULike 4.8.3\n"
    66"Report-Msgid-Bugs-To: https://wpulike.com\n"
    7 "POT-Creation-Date: 2025-11-30 08:02:02+00:00\n"
     7"POT-Creation-Date: 2025-12-28 12:04:33+00:00\n"
    88"MIME-Version: 1.0\n"
    99"Content-Type: text/plain; charset=utf-8\n"
     
    158158msgstr ""
    159159
    160 #: admin/admin-ajax.php:185 admin/admin-hooks.php:603 admin/admin-hooks.php:678
     160#: admin/admin-ajax.php:183
     161msgid "Growth"
     162msgstr ""
     163
     164#: admin/admin-ajax.php:186 admin/admin-hooks.php:594 admin/admin-hooks.php:669
    161165#: admin/classes/class-wp-ulike-admin-panel.php:774
    162166#: admin/classes/class-wp-ulike-admin-panel.php:781
     
    166170msgstr ""
    167171
    168 #: admin/admin-ajax.php:186 admin/classes/class-wp-ulike-admin-panel.php:786
     172#: admin/admin-ajax.php:187 admin/classes/class-wp-ulike-admin-panel.php:786
    169173#: admin/classes/class-wp-ulike-admin-panel.php:820
    170174msgid "Unlike"
    171175msgstr ""
    172176
    173 #: admin/admin-ajax.php:187
     177#: admin/admin-ajax.php:188
    174178msgid "Dislike"
    175179msgstr ""
    176180
    177 #: admin/admin-ajax.php:188
     181#: admin/admin-ajax.php:189
    178182msgid "Undislike"
    179183msgstr ""
    180184
    181 #: admin/admin-ajax.php:189
     185#: admin/admin-ajax.php:190
    182186msgid "Select..."
    183187msgstr ""
    184188
    185 #: admin/admin-ajax.php:190
     189#: admin/admin-ajax.php:191
    186190msgid "Date Range"
    187191msgstr ""
    188192
    189 #: admin/admin-ajax.php:191
     193#: admin/admin-ajax.php:192
    190194msgid "This Week"
    191195msgstr ""
    192196
    193 #: admin/admin-ajax.php:192
     197#: admin/admin-ajax.php:193
    194198msgid "Last Week"
    195199msgstr ""
    196200
    197 #: admin/admin-ajax.php:193
     201#: admin/admin-ajax.php:194
    198202msgid "Last {{days}} Days"
    199203msgstr ""
    200204
    201 #: admin/admin-ajax.php:194
     205#: admin/admin-ajax.php:195
    202206msgid "Last {{months}} Months"
    203207msgstr ""
    204208
    205 #: admin/admin-ajax.php:195
     209#: admin/admin-ajax.php:196
    206210msgid "This Year"
    207211msgstr ""
    208212
    209 #: admin/admin-ajax.php:196
     213#: admin/admin-ajax.php:197
    210214msgid "Last Year"
    211215msgstr ""
    212216
    213 #: admin/admin-ajax.php:197
     217#: admin/admin-ajax.php:198
    214218msgid "Status Filter"
    215219msgstr ""
    216220
    217 #: admin/admin-ajax.php:198 admin/classes/class-wp-ulike-admin-panel.php:375
     221#: admin/admin-ajax.php:199 admin/classes/class-wp-ulike-admin-panel.php:375
    218222#: admin/includes/templates/about.php:116
    219223msgid "Content Types"
    220224msgstr ""
    221225
    222 #: admin/admin-ajax.php:199
     226#: admin/admin-ajax.php:200
    223227msgid "Post Types"
    224228msgstr ""
    225229
    226 #: admin/admin-ajax.php:200
     230#: admin/admin-ajax.php:201
    227231msgid "View By"
    228232msgstr ""
    229233
    230 #: admin/admin-ajax.php:201
     234#: admin/admin-ajax.php:202
    231235msgid "Device"
    232236msgstr ""
    233237
    234 #: admin/admin-ajax.php:202
     238#: admin/admin-ajax.php:203
    235239msgid "OS"
    236240msgstr ""
    237241
    238 #: admin/admin-ajax.php:203
     242#: admin/admin-ajax.php:204
    239243msgid "Browser"
    240244msgstr ""
    241245
    242 #: admin/admin-ajax.php:204
     246#: admin/admin-ajax.php:205
    243247msgid "Show Filters"
    244248msgstr ""
    245249
    246 #: admin/admin-ajax.php:205
     250#: admin/admin-ajax.php:206
    247251msgid "Hide Filters"
    248252msgstr ""
    249253
    250 #: admin/admin-ajax.php:206
     254#: admin/admin-ajax.php:207
    251255msgid "Clear all"
    252256msgstr ""
    253257
    254 #: admin/admin-ajax.php:207
     258#: admin/admin-ajax.php:208
    255259msgid "Apply"
    256260msgstr ""
    257261
    258 #: admin/admin-ajax.php:210
     262#: admin/admin-ajax.php:211
    259263msgid "Dates"
    260264msgstr ""
    261265
    262 #: admin/admin-ajax.php:211
     266#: admin/admin-ajax.php:212
    263267msgid "Totals"
    264268msgstr ""
    265269
    266 #: admin/admin-ajax.php:212
     270#: admin/admin-ajax.php:213
    267271msgid "No data to display"
    268272msgstr ""
    269273
    270 #: admin/admin-ajax.php:213
     274#: admin/admin-ajax.php:214
    271275msgid "Daily Interactions"
    272276msgstr ""
    273277
    274 #: admin/admin-ajax.php:214
     278#: admin/admin-ajax.php:215
    275279msgid "Monthly Interactions"
    276280msgstr ""
    277281
    278 #: admin/admin-ajax.php:217
     282#: admin/admin-ajax.php:218
    279283msgid "Engaged Users"
    280284msgstr ""
    281285
    282 #: admin/admin-ajax.php:218
     286#: admin/admin-ajax.php:219
    283287msgid "Published"
    284288msgstr ""
    285289
    286 #: admin/admin-ajax.php:219 admin/admin-ajax.php:221 admin/admin-ajax.php:250
     290#: admin/admin-ajax.php:220 admin/admin-ajax.php:222 admin/admin-ajax.php:253
    287291#: admin/classes/class-wp-ulike-admin-panel.php:172
    288292#: admin/classes/class-wp-ulike-admin-panel.php:345
     
    293297msgstr ""
    294298
    295 #: admin/admin-ajax.php:220
     299#: admin/admin-ajax.php:221
    296300msgid "Engagement"
    297301msgstr ""
    298302
    299 #: admin/admin-ajax.php:222
     303#: admin/admin-ajax.php:223
    300304msgid "By"
    301305msgstr ""
    302306
    303 #: admin/admin-ajax.php:225
     307#: admin/admin-ajax.php:224
     308msgid "Views"
     309msgstr ""
     310
     311#: admin/admin-ajax.php:227
    304312msgid "Date"
    305313msgstr ""
    306314
    307 #: admin/admin-ajax.php:226
     315#: admin/admin-ajax.php:228
    308316msgid "User"
    309317msgstr ""
    310318
    311 #: admin/admin-ajax.php:227
     319#: admin/admin-ajax.php:229
    312320msgid "IP"
    313321msgstr ""
    314322
    315 #: admin/admin-ajax.php:228
     323#: admin/admin-ajax.php:230
    316324msgid "Status"
    317325msgstr ""
    318326
    319 #: admin/admin-ajax.php:229
     327#: admin/admin-ajax.php:231
    320328msgid "Comment Author"
    321329msgstr ""
    322330
    323 #: admin/admin-ajax.php:230
     331#: admin/admin-ajax.php:232
    324332msgid "Comment Content"
    325333msgstr ""
    326334
    327 #: admin/admin-ajax.php:231
     335#: admin/admin-ajax.php:233
    328336msgid "Activity Title"
    329337msgstr ""
    330338
    331 #: admin/admin-ajax.php:232
     339#: admin/admin-ajax.php:234
    332340msgid "Topic Title"
    333341msgstr ""
    334342
    335 #: admin/admin-ajax.php:233
     343#: admin/admin-ajax.php:235
    336344msgid "Post Title"
    337345msgstr ""
    338346
    339 #: admin/admin-ajax.php:234
     347#: admin/admin-ajax.php:236
    340348msgid "Category"
    341349msgstr ""
    342350
    343 #: admin/admin-ajax.php:235
     351#: admin/admin-ajax.php:237
    344352msgid "Actions"
    345353msgstr ""
    346354
    347 #: admin/admin-ajax.php:236
     355#: admin/admin-ajax.php:238
    348356msgid "Showing"
    349357msgstr ""
    350358
    351 #: admin/admin-ajax.php:237
     359#: admin/admin-ajax.php:239
    352360msgid "to"
    353361msgstr ""
    354362
    355 #: admin/admin-ajax.php:238
     363#: admin/admin-ajax.php:240
    356364msgid "of"
    357365msgstr ""
    358366
    359 #: admin/admin-ajax.php:239
     367#: admin/admin-ajax.php:241
    360368msgid "results"
    361369msgstr ""
    362370
    363 #: admin/admin-ajax.php:240
     371#: admin/admin-ajax.php:242
    364372msgid "Back"
    365373msgstr ""
    366374
    367 #: admin/admin-ajax.php:241
     375#: admin/admin-ajax.php:243
    368376msgid "Search"
    369377msgstr ""
    370378
    371 #: admin/admin-ajax.php:242
     379#: admin/admin-ajax.php:244
    372380msgid "Loading..."
    373381msgstr ""
    374382
    375 #: admin/admin-ajax.php:243
     383#: admin/admin-ajax.php:245
    376384msgid "Download CSV"
    377385msgstr ""
    378386
    379 #: admin/admin-ajax.php:244
     387#: admin/admin-ajax.php:246
    380388msgid "Delete Selected"
    381389msgstr ""
    382390
    383 #: admin/admin-ajax.php:245
     391#: admin/admin-ajax.php:247
    384392msgid "Filter by type:"
    385393msgstr ""
    386394
    387 #: admin/admin-ajax.php:246
     395#: admin/admin-ajax.php:248
    388396msgid "per page"
    389397msgstr ""
    390398
    391 #: admin/admin-ajax.php:249 admin/classes/class-wp-ulike-admin-panel.php:171
     399#: admin/admin-ajax.php:249
     400msgid "View all"
     401msgstr ""
     402
     403#: admin/admin-ajax.php:252 admin/classes/class-wp-ulike-admin-panel.php:171
    392404#: admin/classes/class-wp-ulike-admin-panel.php:344
    393405#: admin/classes/class-wp-ulike-admin-panel.php:388
     
    397409msgstr ""
    398410
    399 #: admin/admin-ajax.php:251 admin/classes/class-wp-ulike-admin-panel.php:173
     411#: admin/admin-ajax.php:254 admin/classes/class-wp-ulike-admin-panel.php:173
    400412#: admin/classes/class-wp-ulike-admin-panel.php:346
    401413#: includes/hooks/third-party.php:371
     
    403415msgstr ""
    404416
    405 #: admin/admin-ajax.php:252 admin/classes/class-wp-ulike-admin-panel.php:174
     417#: admin/admin-ajax.php:255 admin/classes/class-wp-ulike-admin-panel.php:174
    406418#: admin/classes/class-wp-ulike-admin-panel.php:347
    407419#: includes/hooks/third-party.php:379
     
    409421msgstr ""
    410422
    411 #: admin/admin-ajax.php:253
     423#: admin/admin-ajax.php:256
    412424msgid "Engagers"
    413425msgstr ""
    414426
    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
     428msgid "Something Went Wrong"
    421429msgstr ""
    422430
    423431#: admin/admin-ajax.php:260
     432msgid ""
     433"We encountered an error while loading the data. Please try refreshing the "
     434"page or contact support if the problem persists."
     435msgstr ""
     436
     437#: admin/admin-ajax.php:261
     438msgid "Page Not Found"
     439msgstr ""
     440
     441#: admin/admin-ajax.php:262
     442msgid ""
     443"The page you are looking for does not exist. It may have been moved or "
     444"deleted."
     445msgstr ""
     446
     447#: admin/admin-ajax.php:263
     448msgid "No Data Available"
     449msgstr ""
     450
     451#: admin/admin-ajax.php:264
     452msgid ""
     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."
     455msgstr ""
     456
     457#: admin/admin-ajax.php:265
     458msgid "Go to Home"
     459msgstr ""
     460
     461#: admin/admin-ajax.php:266
     462msgid "Refresh Page"
     463msgstr ""
     464
     465#: admin/admin-ajax.php:267
     466msgid "If this problem continues, please contact support."
     467msgstr ""
     468
     469#: admin/admin-ajax.php:268
     470msgid "Data will appear here once it becomes available."
     471msgstr ""
     472
     473#: admin/admin-ajax.php:269
     474msgid "Check the URL or return to the homepage."
     475msgstr ""
     476
     477#: admin/admin-ajax.php:272
    424478msgid "Unlock Your Website's True Potential!"
    425479msgstr ""
    426480
    427 #: admin/admin-ajax.php:261
     481#: admin/admin-ajax.php:273
    428482msgid ""
    429483"Imagine knowing exactly what makes your content shine and how to connect "
     
    433487msgstr ""
    434488
    435 #: admin/admin-ajax.php:262 admin/includes/templates/go-pro.php:301
     489#: admin/admin-ajax.php:274 admin/includes/templates/go-pro.php:301
    436490msgid "Get Started"
    437491msgstr ""
    438492
    439 #: admin/admin-ajax.php:263
     493#: admin/admin-ajax.php:275
    440494msgid "Discover More"
    441495msgstr ""
    442496
    443 #: admin/admin-ajax.php:266
     497#: admin/admin-ajax.php:278
    444498msgid "{{count}} {{interval}} ago"
    445499msgstr ""
    446500
    447 #: admin/admin-ajax.php:267
     501#: admin/admin-ajax.php:279
    448502msgid "year"
    449503msgstr ""
    450504
    451 #: admin/admin-ajax.php:268
     505#: admin/admin-ajax.php:280
    452506msgid "years"
    453507msgstr ""
    454508
    455 #: admin/admin-ajax.php:269
     509#: admin/admin-ajax.php:281
    456510msgid "month"
    457511msgstr ""
    458512
    459 #: admin/admin-ajax.php:270
     513#: admin/admin-ajax.php:282
    460514msgid "months"
    461515msgstr ""
    462516
    463 #: admin/admin-ajax.php:271
     517#: admin/admin-ajax.php:283
    464518msgid "week"
    465519msgstr ""
    466520
    467 #: admin/admin-ajax.php:272
     521#: admin/admin-ajax.php:284
    468522msgid "weeks"
    469523msgstr ""
    470524
    471 #: admin/admin-ajax.php:273
     525#: admin/admin-ajax.php:285
    472526msgid "day"
    473527msgstr ""
    474528
    475 #: admin/admin-ajax.php:274
     529#: admin/admin-ajax.php:286
    476530msgid "days"
    477531msgstr ""
    478532
    479 #: admin/admin-ajax.php:275
     533#: admin/admin-ajax.php:287
    480534msgid "hour"
    481535msgstr ""
    482536
    483 #: admin/admin-ajax.php:276
     537#: admin/admin-ajax.php:288
    484538msgid "hours"
    485539msgstr ""
    486540
    487 #: admin/admin-ajax.php:277
     541#: admin/admin-ajax.php:289
    488542msgid "minute"
    489543msgstr ""
    490544
    491 #: admin/admin-ajax.php:278
     545#: admin/admin-ajax.php:290
    492546msgid "minutes"
    493547msgstr ""
    494548
    495 #: admin/admin-ajax.php:279
     549#: admin/admin-ajax.php:291
    496550msgid "second"
    497551msgstr ""
    498552
    499 #: admin/admin-ajax.php:280
     553#: admin/admin-ajax.php:292
    500554msgid "seconds"
    501555msgstr ""
    502556
    503 #: admin/admin-ajax.php:281
     557#: admin/admin-ajax.php:293
    504558msgid "just now"
    505559msgstr ""
     
    519573msgstr ""
    520574
    521 #: admin/admin-hooks.php:147
     575#: admin/admin-hooks.php:138
    522576msgid "Wow! You've hit an amazing milestone!"
    523577msgstr ""
    524578
     579#: admin/admin-hooks.php:141
     580msgid "Fantastic! Your community is really engaged!"
     581msgstr ""
     582
     583#: admin/admin-hooks.php:144
     584msgid "Awesome! You're building something great!"
     585msgstr ""
     586
    525587#: admin/admin-hooks.php:150
    526 msgid "Fantastic! Your community is really engaged!"
    527 msgstr ""
    528 
    529 #: admin/admin-hooks.php:153
    530 msgid "Awesome! You're building something great!"
    531 msgstr ""
    532 
    533 #: admin/admin-hooks.php:159
    534588msgid "Your Community Loves WP ULike! ⭐"
    535589msgstr ""
    536590
    537 #: admin/admin-hooks.php:161
     591#: admin/admin-hooks.php:152
    538592msgid ""
    539593"You've received %s likes from your community — that's incredible! Your "
     
    544598msgstr ""
    545599
    546 #: admin/admin-hooks.php:170
     600#: admin/admin-hooks.php:161
    547601msgid "⭐ Share My Experience"
    548602msgstr ""
    549603
    550 #: admin/admin-hooks.php:175 admin/admin-hooks.php:264
    551 #: admin/admin-hooks.php:322
     604#: admin/admin-hooks.php:166 admin/admin-hooks.php:255
     605#: admin/admin-hooks.php:313
    552606msgid "Maybe Later"
    553607msgstr ""
    554608
    555 #: admin/admin-hooks.php:181 admin/admin-hooks.php:328
     609#: admin/admin-hooks.php:172 admin/admin-hooks.php:319
    556610msgid "Don't Ask Again"
    557611msgstr ""
    558612
     613#: admin/admin-hooks.php:214
     614msgid "Your license has expired"
     615msgstr ""
     616
     617#: admin/admin-hooks.php:217
     618msgid "Your license has been disabled"
     619msgstr ""
     620
     621#: admin/admin-hooks.php:220 admin/admin-hooks.php:226
     622msgid "Your license needs attention"
     623msgstr ""
     624
    559625#: 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"
     626msgid "Unable to verify your license"
    569627msgstr ""
    570628
    571629#: admin/admin-hooks.php:232
    572 msgid "Unable to verify your license"
    573 msgstr ""
    574 
    575 #: admin/admin-hooks.php:241
    576630msgid "Special Offer: Save %s on WP ULike Pro! 🎁"
    577631msgstr ""
    578632
    579 #: admin/admin-hooks.php:245
     633#: admin/admin-hooks.php:236
    580634msgid ""
    581635"We noticed your license needs a quick update. Here's some great news — we "
     
    585639msgstr ""
    586640
    587 #: admin/admin-hooks.php:257
     641#: admin/admin-hooks.php:248
    588642msgid "🎉 Claim My %s Discount"
    589643msgstr ""
    590644
    591 #: admin/admin-hooks.php:311
     645#: admin/admin-hooks.php:302
    592646msgid "Create Beautiful User Profiles Your Community Will Love! 🎨"
    593647msgstr ""
    594648
    595 #: admin/admin-hooks.php:312
     649#: admin/admin-hooks.php:303
    596650msgid ""
    597651"Want to take your community engagement to the next level? With WP ULike "
     
    602656msgstr ""
    603657
    604 #: admin/admin-hooks.php:317
     658#: admin/admin-hooks.php:308
    605659msgid "✨ Discover Profile Builder"
    606660msgstr ""
    607661
    608 #: admin/admin-hooks.php:368 admin/includes/templates/about.php:45
     662#: admin/admin-hooks.php:359 admin/includes/templates/about.php:45
    609663msgid "Go Pro"
    610664msgstr ""
    611665
    612 #: admin/admin-hooks.php:369
     666#: admin/admin-hooks.php:360
    613667msgid "Upgrade"
    614668msgstr ""
    615669
    616 #: admin/admin-hooks.php:756
     670#: admin/admin-hooks.php:747
    617671msgid "PHP Snippets"
    618672msgstr ""
    619673
    620 #: admin/admin-hooks.php:758
     674#: admin/admin-hooks.php:749
    621675msgid ""
    622676"Add PHP snippets without opening and closing tags (&lt;?php and ?&gt;). If "
     
    625679msgstr ""
    626680
    627 #: admin/admin-hooks.php:767
     681#: admin/admin-hooks.php:758
    628682msgid "Javascript Snippets"
    629683msgstr ""
    630684
    631 #: admin/admin-hooks.php:769
     685#: admin/admin-hooks.php:760
    632686msgid ""
    633687"This code will output immediately before the closing &lt;/body&gt; tag in "
     
    636690msgstr ""
    637691
    638 #: admin/classes/class-wp-ulike-admin-pages.php:27 includes/plugin.php:114
     692#: admin/classes/class-wp-ulike-admin-pages.php:27 includes/plugin.php:125
    639693msgid "Statistics"
    640694msgstr ""
    641695
    642696#: admin/classes/class-wp-ulike-admin-pages.php:35
    643 #: admin/includes/templates/about.php:29 includes/plugin.php:115
     697#: admin/includes/templates/about.php:29 includes/plugin.php:126
    644698msgid "About"
    645699msgstr ""
     
    649703msgstr ""
    650704
    651 #: admin/classes/class-wp-ulike-admin-panel.php:43 includes/plugin.php:113
     705#: admin/classes/class-wp-ulike-admin-panel.php:43 includes/plugin.php:124
    652706msgid "Settings"
    653707msgstr ""
     
    925979#: admin/classes/class-wp-ulike-admin-panel.php:422
    926980#: admin/classes/class-wp-ulike-widget.php:293
    927 #: admin/classes/class-wp-ulike-widget.php:583
     981#: admin/classes/class-wp-ulike-widget.php:577
    928982msgid "BuddyPress"
    929983msgstr ""
     
    15721626
    15731627#: admin/classes/class-wp-ulike-logs.php:173
    1574 #: admin/classes/class-wp-ulike-stats.php:272
     1628#: admin/classes/class-wp-ulike-stats.php:303
    15751629msgid "Guest User"
    15761630msgstr ""
     
    16341688msgstr ""
    16351689
    1636 #: admin/classes/class-wp-ulike-widget.php:518
     1690#: admin/classes/class-wp-ulike-widget.php:512
    16371691msgid "Most Liked"
    16381692msgstr ""
    16391693
    1640 #: admin/classes/class-wp-ulike-widget.php:533
     1694#: admin/classes/class-wp-ulike-widget.php:527
    16411695msgid "Title:"
    16421696msgstr ""
    16431697
     1698#: admin/classes/class-wp-ulike-widget.php:532
     1699msgid "Type:"
     1700msgstr ""
     1701
     1702#: admin/classes/class-wp-ulike-widget.php:534
     1703msgid "Most Liked Posts"
     1704msgstr ""
     1705
     1706#: admin/classes/class-wp-ulike-widget.php:535
     1707msgid "Most Liked Comments"
     1708msgstr ""
     1709
     1710#: admin/classes/class-wp-ulike-widget.php:536
     1711msgid "Most Liked Activities"
     1712msgstr ""
     1713
     1714#: admin/classes/class-wp-ulike-widget.php:537
     1715msgid "Most Liked Topics"
     1716msgstr ""
     1717
    16441718#: 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"
     1719msgid "Most Liked Users"
     1720msgstr ""
     1721
     1722#: admin/classes/class-wp-ulike-widget.php:539
     1723msgid "Last Posts Liked By User"
    16621724msgstr ""
    16631725
    16641726#: admin/classes/class-wp-ulike-widget.php:544
    1665 msgid "Most Liked Users"
    1666 msgstr ""
    1667 
    1668 #: admin/classes/class-wp-ulike-widget.php:545
    1669 msgid "Last Posts Liked By User"
    1670 msgstr ""
    1671 
    1672 #: admin/classes/class-wp-ulike-widget.php:550
    16731727msgid "Number of items to show:"
    16741728msgstr ""
    16751729
     1730#: admin/classes/class-wp-ulike-widget.php:549
     1731msgid "Period:"
     1732msgstr ""
     1733
     1734#: admin/classes/class-wp-ulike-widget.php:551
     1735msgid "All The Times"
     1736msgstr ""
     1737
     1738#: admin/classes/class-wp-ulike-widget.php:552
     1739msgid "Year"
     1740msgstr ""
     1741
     1742#: admin/classes/class-wp-ulike-widget.php:553
     1743msgid "Month"
     1744msgstr ""
     1745
     1746#: admin/classes/class-wp-ulike-widget.php:554
     1747msgid "Week"
     1748msgstr ""
     1749
    16761750#: 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"
     1751msgid "Yesterday"
     1752msgstr ""
     1753
     1754#: admin/classes/class-wp-ulike-widget.php:556
     1755msgid "Today"
    16941756msgstr ""
    16951757
    16961758#: admin/classes/class-wp-ulike-widget.php:561
    1697 msgid "Yesterday"
    1698 msgstr ""
    1699 
    1700 #: admin/classes/class-wp-ulike-widget.php:562
    1701 msgid "Today"
    1702 msgstr ""
    1703 
    1704 #: admin/classes/class-wp-ulike-widget.php:567
    17051759msgid "Style:"
    17061760msgstr ""
    17071761
    1708 #: admin/classes/class-wp-ulike-widget.php:569
     1762#: admin/classes/class-wp-ulike-widget.php:563
     1763#: includes/functions/templates.php:23
    17091764msgid "Simple"
    17101765msgstr ""
    17111766
    1712 #: admin/classes/class-wp-ulike-widget.php:570
     1767#: admin/classes/class-wp-ulike-widget.php:564
    17131768#: includes/functions/templates.php:29
    17141769msgid "Heart"
    17151770msgstr ""
    17161771
     1772#: admin/classes/class-wp-ulike-widget.php:569
     1773msgid "Title Trim (Length):"
     1774msgstr ""
     1775
    17171776#: admin/classes/class-wp-ulike-widget.php:575
    1718 msgid "Title Trim (Length):"
    1719 msgstr ""
    1720 
    1721 #: admin/classes/class-wp-ulike-widget.php:581
    17221777msgid "Profile URL:"
    17231778msgstr ""
    17241779
     1780#: admin/classes/class-wp-ulike-widget.php:578
     1781msgid "UltimateMember"
     1782msgstr ""
     1783
    17251784#: admin/classes/class-wp-ulike-widget.php:584
    1726 msgid "UltimateMember"
    1727 msgstr ""
    1728 
    1729 #: admin/classes/class-wp-ulike-widget.php:590
    17301785msgid "Activate Like Counter"
    17311786msgstr ""
    17321787
    1733 #: admin/classes/class-wp-ulike-widget.php:595
     1788#: admin/classes/class-wp-ulike-widget.php:589
    17341789msgid "Activate Thumbnail/Avatar"
    17351790msgstr ""
    17361791
    1737 #: admin/classes/class-wp-ulike-widget.php:599
     1792#: admin/classes/class-wp-ulike-widget.php:593
    17381793msgid "Thumbnail/Avatar size:"
    17391794msgstr ""
     
    21992254#: admin/includes/templates/go-pro.php:297
    22002255msgid "Contact Support"
     2256msgstr ""
     2257
     2258#: includes/blocks/index.php:407
     2259msgid "Use Settings Default"
     2260msgstr ""
     2261
     2262#: includes/blocks/index.php:409
     2263msgid "Use Settings Default (%s)"
    22012264msgstr ""
    22022265
     
    24532516msgstr ""
    24542517
    2455 #: includes/functions/templates.php:23
    2456 msgid "Default"
    2457 msgstr ""
    2458 
    24592518#: includes/functions/templates.php:35
    24602519msgid "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 ===
    22Contributors: alimir
    33Donate link: https://wpulike.com/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme
     
    77Requires at least: 6.0
    88Tested up to: 6.9
    9 Stable tag: 4.8.2
     9Stable tag: 4.8.3
    1010License: GPLv2 or later
    1111License URI: http://www.gnu.org/licenses/gpl-2.0.html
    1212
    13 Add Like buttons to your content and discover what your audience loves with real-time analytics. Turn visitors into engaged fans.
     13Like & Dislike buttons with real-time analytics. Track engagement and understand what your audience loves across posts, products, and comments.
    1414
    1515== Description ==
    1616
    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
     19You'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
     25Activate 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
     27Every 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
     29The 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
     31And 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.
    2240
    2341[youtube https://www.youtube.com/watch?v=nxQto2Yj_yc]
    2442
    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
     45We'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
     71We 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
     87We're not a faceless corporation. We're a team that actually cares about your success.
     88
     89Every 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
     91We 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
     93Security and privacy aren't afterthoughts—they're built into everything we do. We follow WordPress best practices because your site's security matters.
     94
     95And 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
     99The 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
     113Think of Pro as your growth partner. When you're ready to scale, we're here to help you get there.
    107114
    108115[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)
     
    110117== Installation ==
    111118
    112 Getting started with WP ULike is quick and easy. Here's what you need to know:
     119Getting started takes about two minutes. Here's what you need:
    113120
    114121= Minimum Requirements =
     
    128135= Installation =
    129136
    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 click Activate.
    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
     1391. **WordPress Admin** (Recommended): Go to Plugins → Add New, search for "WP ULike", click Install Now, then Activate.
     140
     1412. **Manual Installation**: Download, unzip, upload to `wp-content/plugins/`, then activate through your Plugins menu.
     142
     143That'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.
    139146
    140147== Screenshots ==
    141148
    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.
     1491. **Like & Dislike Button Templates:** Multiple beautiful templates. Customize colors, styles, and text to match your brand.
     150
     1512. **Engagement Metrics Dashboard:** Powerful analytics dashboard. Track voting statistics, engagement trends, and understand what resonates.
     152
     1533. **Top Trends & Insights:** Discover your top-performing content with visual breakdowns. Make data-driven decisions.
     154
     1554. **Gutenberg Block:** Add WP ULike buttons directly in the block editor with customizable templates and settings.
    153156
    154157== Frequently Asked Questions ==
    155158
    156159= Do visitors need to register or login to like content? =
    157 Not 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.
     160Nope. 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.
    158161
    159162= 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.
     163Yes. 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? =
     166Absolutely. 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.
    167167
    168168= 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.
     169Yes. 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.
    170170
    171171= 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.
     172Free 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.
    175173
    176174= 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.
     175Yes. Works perfectly across WordPress multisite networks. Each site gets its own settings and statistics.
    178176
    179177= 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.
     178Yes. 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.
    181179
    182180== 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.
    183193
    184194= 4.8.2 =
  • wp-ulike/trunk/wp-ulike.php

    r3412215 r3428591  
    44 * Plugin URI:        https://wpulike.com/?utm_source=wp-plugins&utm_campaign=plugin-uri&utm_medium=wp-dash
    55 * 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.2
     6 * Version:           4.8.3
    77 * Author:            TechnoWich
    88 * Author URI:        https://technowich.com/?utm_source=wp-plugins&utm_campaign=author-uri&utm_medium=wp-dash
     
    3131// Do not change these values
    3232define( 'WP_ULIKE_PLUGIN_URI'   , 'https://wpulike.com/'                    );
    33 define( 'WP_ULIKE_VERSION'      , '4.8.2'                                   );
     33define( 'WP_ULIKE_VERSION'      , '4.8.3'                                   );
    3434define( 'WP_ULIKE_DB_VERSION'   , '2.4'                                     );
    3535define( 'WP_ULIKE_SLUG'         , 'wp-ulike'                                );
Note: See TracChangeset for help on using the changeset viewer.