Advertisement
palsushobhan

Notification query optimization

Oct 27th, 2023
700
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.05 KB | None | 0 0
  1. add_action( 'wcfm_page_heading', function() {
  2.     global $WCFM, $wpdb;
  3.     if(apply_filters( 'wcfm_is_allow_notifications', true )) {
  4.         $message_to = apply_filters( 'wcfm_message_author', get_current_user_id() );
  5.         if( !$message_to || !wcfm_is_allow_wcfm() ) return;
  6.         $total_messages = 0;
  7.         if( wcfm_is_vendor() || ( function_exists( 'wcfm_is_delivery_boy' ) && wcfm_is_delivery_boy() ) || ( function_exists( 'wcfm_is_affiliate' ) && wcfm_is_affiliate() ) ) {
  8.             $cache_key = $WCFM->wcfm_notification->cache_group . '-message-' . $message_to;
  9.         } else {
  10.             $cache_key = $WCFM->wcfm_notification->cache_group . '-message-0';
  11.         }
  12.         $total_messages = get_transient( $cache_key );
  13.         if( empty( $total_messages ) ) {
  14.             $sql = 'SELECT COUNT(wcfm_messages.ID) FROM ' . $wpdb->prefix . 'wcfm_messages AS wcfm_messages';
  15.             $sql .= ' WHERE 1=1';
  16.            
  17.             $status_filter = " AND `is_direct_message` = 1";
  18.             $sql .= $status_filter;
  19.            
  20.             if( wcfm_is_vendor() || ( function_exists( 'wcfm_is_delivery_boy' ) && wcfm_is_delivery_boy() ) || ( function_exists( 'wcfm_is_affiliate' ) && wcfm_is_affiliate() ) ) {
  21.                 $vendor_filter = " AND ( `author_id` = {$message_to} OR `message_to` = -1 OR `message_to` = {$message_to} )";
  22.                 $sql .= $vendor_filter;
  23.             } else {
  24.                 $group_manager_filter = apply_filters( 'wcfm_notification_group_manager_filter', '' );
  25.                 if( $group_manager_filter ) {
  26.                     $sql .= $group_manager_filter;
  27.                 } else {
  28.                     $sql .= " AND `author_id` != -1";
  29.                 }
  30.             }
  31.             $message_status_filter = " ID NOT IN (SELECT message FROM {$wpdb->prefix}wcfm_messages_modifier WHERE read_by={$message_to})";
  32.             $sql .= $message_status_filter;
  33.            
  34.             $total_messages = $wpdb->get_var( $sql );
  35.            
  36.             set_transient( $cache_key, $total_messages );
  37.         }
  38.     }
  39. }, 9 );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement