آخرین اخبار
'عبارت جدید' $replace_map = array( 'خبرگزاری مهر' => 'پایگاه خبری فردای عالیشاهی', 'خبرگزاری فارس' => 'پایگاه خبری فردای عالیشاهی', 'خبرنگار مهر' => 'خبرنگار فردای عالیشاهی', 'خبرنگار خبرگزاری مهر' => 'خبرنگار فردای عالیشاهی', 'خبرنگار فارس' => 'خبرنگار فردای عالیشاهی', // مثال برای لینک ها (در صورت نیاز) 'https://www.mehrnews.com' => 'https://fardaialishahi.example', 'http://www.mehrnews.com' => 'https://fardaialishahi.example', 'https://www.farsnews.ir' => 'https://fardaialishahi.example', 'http://www.farsnews.ir' => 'https://fardaialishahi.example', ); // --------------------------------------------------------------------- // تابع جایگزینی امن: از str_ireplace برای عملکرد سریع و بدون regex استفاده می‌کنیم $replace_callback = function( $text ) use ( $replace_map ) { if ( empty( $text ) || ! is_string( $text ) ) { return $text; } foreach ( $replace_map as $old => $new ) { $text = str_ireplace( $old, $new, $text ); } return $text; }; // اعمال به خروجی نوشته، عنوان، خلاصه، کامنت‌ها و ویجت‌ها add_filter( 'the_content', $replace_callback, 20 ); add_filter( 'the_title', $replace_callback, 20 ); add_filter( 'the_excerpt', $replace_callback, 20 ); add_filter( 'comment_text', $replace_callback, 20 ); add_filter( 'widget_text', $replace_callback, 20 ); add_filter( 'widget_text_content', $replace_callback, 20 ); // RSS feeds add_filter( 'the_content_feed', $replace_callback, 20 ); add_filter( 'the_title_rss', $replace_callback, 20 ); // اگر می‌خواهید هنگام ذخیره پست نیز جایگزینی دائمی در دیتابیس انجام شود، // این hook فعال است؛ برای فقط نمایش آن را غیرفعال کنید (remove/comment). add_filter( 'wp_insert_post_data', function( $data, $postarr ) use ( $replace_map ) { if ( ! empty( $data['post_title'] ) ) { foreach ( $replace_map as $old => $new ) { $data['post_title'] = str_ireplace( $old, $new, $data['post_title'] ); } } if ( ! empty( $data['post_content'] ) ) { foreach ( $replace_map as $old => $new ) { $data['post_content'] = str_ireplace( $old, $new, $data['post_content'] ); } } if ( isset( $data['post_excerpt'] ) && $data['post_excerpt'] !== '' ) { foreach ( $replace_map as $old => $new ) { $data['post_excerpt'] = str_ireplace( $old, $new, $data['post_excerpt'] ); } } return $data; }, 20, 2 ); // اضافه‌کردن اسکریپت JS برای پوشش متن‌های لود شده دینامیک (AJAX) یا مواردی که PHP فیلترها شاملشان نمی‌شود add_action( 'wp_enqueue_scripts', function() use ( $replace_map ) { if ( empty( $replace_map ) ) { return; } // تبدیل map به JSON امن $json_map = wp_json_encode( $replace_map ); // ثبت اسکریپت خالی و افزودن inline wp_register_script( 'replace-news-source-js', false ); wp_enqueue_script( 'replace-news-source-js' ); $inline_js = " (function(map){ if(!map) return; function escForRegex(s){ return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); } function replaceTextNode(node){ if(!node || node.nodeType !== Node.TEXT_NODE) return; var text = node.nodeValue; var changed = false; for(var key in map){ if(!map.hasOwnProperty(key)) continue; try{ var re = new RegExp(escForRegex(key), 'gi'); if(re.test(text)){ text = text.replace(re, map[key]); changed = true; } }catch(e){} } if(changed) node.nodeValue = text; } function walk(node){ var child = node.firstChild; while(child){ var next = child.nextSibling; if(child.nodeType === Node.TEXT_NODE){ replaceTextNode(child); } else if(child.nodeType === Node.ELEMENT_NODE && !/(SCRIPT|STYLE)/i.test(child.nodeName)){ walk(child); } child = next; } } // اجرا در بدنه صفحه if(document && document.body){ walk(document.body); } // مشاهده تغییرات DOM برای محتواهای لودشونده var observer = new MutationObserver(function(mutations){ mutations.forEach(function(m){ if(m.addedNodes && m.addedNodes.length){ m.addedNodes.forEach(function(n){ if(n.nodeType === Node.TEXT_NODE){ replaceTextNode(n); } else { walk(n); } }); } }); }); observer.observe(document.body, { childList: true, subtree: true }); })($json_map); "; wp_add_inline_script( 'replace-news-source-js', $inline_js ); }); }); // end after_setup_theme // --- پایان کد جایگزینی متن --- ?>