false)); if (!$options['auto_upload_images']) { return $content; } // Regular expression to find image URLs $pattern = '/]+src=[\'"]([^\'"]+)[\'"][^>]*>/i'; return preg_replace_callback($pattern, array($this, 'process_image_url'), $content); } /** * Process individual image URL * * @param array $matches Regex matches * @return string Updated img tag */ private function process_image_url($matches) { if (empty($matches[1])) { return $matches[0]; } $url = $matches[1]; // Skip if already a local URL if ($this->is_local_url($url)) { return $matches[0]; } try { $local_url = $this->upload_image($url); if ($local_url) { return str_replace($url, $local_url, $matches[0]); } } catch (Exception $e) { do_action('wp_allstars_image_upload_error', $url, $e->getMessage()); } return $matches[0]; } /** * Check if URL is local * * @param string $url URL to check * @return boolean */ private function is_local_url($url) { $site_url = parse_url(get_site_url(), PHP_URL_HOST); $image_host = parse_url($url, PHP_URL_HOST); return $site_url === $image_host; } /** * Upload external image to media library * * @param string $url External image URL * @return string|false Local URL on success, false on failure */ private function upload_image($url) { // Get file info $file_array = array(); $file_array['name'] = basename($url); // Download file to temp location $file_array['tmp_name'] = download_url($url); if (is_wp_error($file_array['tmp_name'])) { throw new Exception('Failed to download image: ' . $file_array['tmp_name']->get_error_message()); } // Check file type $wp_filetype = wp_check_filetype_and_ext($file_array['tmp_name'], $file_array['name']); if (!$wp_filetype['type']) { unlink($file_array['tmp_name']); throw new Exception('Invalid file type'); } // Upload the file $attachment_id = media_handle_sideload($file_array, 0); if (is_wp_error($attachment_id)) { throw new Exception('Failed to upload image: ' . $attachment_id->get_error_message()); } return wp_get_attachment_url($attachment_id); } /** * Log errors to WordPress debug log * * @param string $url URL that failed * @param string $error Error message */ public function log_error($url, $error) { error_log(sprintf( '[SEO Pro Stack] Auto Upload Images Error - URL: %s, Error: %s', $url, $error )); } }