]*>\s*(The original article.*?)<\/p>/is', '/
]*>\s*(This article.*?originally appeared on.*?)<\/p>/is', '/
]*>\s*(Originally published on.*?)<\/p>/is', '/
]*>\s*(Read more:.*?)<\/p>/is', '/
]*>\s*(Source:.*?)<\/p>/is', '/\[Continue reading.*?\]/is', '/Read the full article.*$/is', ]; foreach ($source_patterns as $pattern) { $content = preg_replace($pattern, '', $content); } // Remove empty paragraphs but preserve structure $content = preg_replace('/
]*>\s*<\/p>/i', '', $content);
// Restore preserved media elements
$content = airsrefe_restore_media_elements($content, $preserved_elements);
// Clean up whitespace but preserve line breaks for structure
$content = preg_replace('/[ \t]+/', ' ', $content);
$content = preg_replace('/\n{3,}/', "\n\n", $content);
return trim($content);
}
function airsrefe_extract_media_elements($content) {
$preserved = [];
$counter = 0;
// Patterns for media elements to preserve
$media_patterns = [
// Images with various attributes
'/]*>/i',
// iframes (YouTube, Twitter, etc.)
'/