// ============================================ // IMAGE SEO CLASS (FIXED) // ============================================ if (!class_exists('TimesBull_Image_SEO')) { class TimesBull_Image_SEO { private static $instance = null; private $image_count = 0; private $featured_image_id = null; public static function get_instance() { if (null === self::$instance) { self::$instance = new self(); } return self::$instance; } private function __construct() { add_filter('wp_get_attachment_image_attributes', [$this, 'add_image_attributes'], 10, 3); add_filter('the_content', [$this, 'auto_add_image_alt']); add_action('add_attachment', [$this, 'auto_image_seo']); add_action('wp', [$this, 'set_featured_image_id']); } public function set_featured_image_id() { if (is_singular()) { $this->featured_image_id = get_post_thumbnail_id(); } } public function add_image_attributes($attr, $attachment, $size) { $this->image_count++; // CRITICAL FIX: Check if this is the featured image $is_featured = ($attachment->ID === $this->featured_image_id); if ($is_featured) { // Featured image - ALWAYS eager, ALWAYS high priority $attr['loading'] = 'eager'; $attr['fetchpriority'] = 'high'; $attr['decoding'] = 'async'; } elseif ($this->image_count === 1 && !is_admin()) { // First non-featured image (e.g., logo) $attr['loading'] = 'eager'; $attr['fetchpriority'] = 'high'; $attr['decoding'] = 'async'; } else { // All other images - lazy load for performance $attr['loading'] = 'lazy'; $attr['decoding'] = 'async'; // Remove fetchpriority from lazy images (prevents conflict) if (isset($attr['fetchpriority'])) { unset($attr['fetchpriority']); } } // Ensure alt text is never empty if (empty($attr['alt'])) { $alt_text = get_post_meta($attachment->ID, '_wp_attachment_image_alt', true); $attr['alt'] = $alt_text ?: get_the_title($attachment->ID); } return $attr; } public function auto_add_image_alt($content) { if (empty($content) || !is_singular() || is_admin()) { return $content; } $post_title = esc_attr(get_the_title()); return preg_replace_callback('/]+)>/i', function($matches) use ($post_title) { $img_tag = $matches[0]; $attributes = $matches[1]; if (!preg_match('/alt=([\'"])(.*?)\1/i', $attributes, $alt_matches) || empty(trim($alt_matches[2]))) { if (stripos($attributes, 'alt=') !== false) { return preg_replace('/alt=([\'"])(.*?)\1/i', 'alt="' . $post_title . '"', $img_tag); } else { return str_replace(' $attachment_id, 'post_title' => $clean_title, 'post_excerpt' => $clean_title, ]); update_post_meta($attachment_id, '_wp_attachment_image_alt', $clean_title); } } TimesBull_Image_SEO::get_instance(); } 2+ New Upi Payment Stories in April 2026 | Upi Payment Updates | ... Skip to content

#UPI Payment

99 Articles
LATEST UPDATES

Stay updated with the latest #UPI Payment news, trending stories, and in-depth analysis. Timesbull brings you real-time updates and comprehensive coverage from trusted sources.

Get the most relevant and timely upi payment news, expert opinions, and exclusive insights. Follow us for daily updates and never miss an important story.

Welcome to the TimesBull #UPI Payment Hub, your definitive source for real-time updates on upi payment news, trending stories, and breaking headlines.

  • Latest Updates: Stay ahead with our Breaking News alerts, updated 24/7.
  • Deep Dives: Explore our #UPI Payment expert analysis and opinion pieces.
  • Local and Global: From local stories to international news, we bring the world to your screen.

Source: TimesBull News Desk | Updated (IST): April 16, 2026 | Total Articles: 99

नई दिल्ली: आधार (Aadhar) के लिए आवेदन प्राप्त करने के लिए मोदी का आवेदन: भारत में पहचान के लिए आवेदन की स्वचालित पुष्टि (यूआईडीएआई) और......

UPI Payment: एक बार फिर भारतीय रिजर्व बैंक ने डिजिटल पेमेंट की दुनिया में दो बदलाव किए हैं। ये बदलाव न सिर्फ आम लोगों की......

UPI Payment New Rule: आज के समय ज्यादातर लोग यूपीआई का इस्तेमाल करते हैं अगर आप भी यूपीआई का उपयोग कर रहे हैं तो ये......