حل مشکل تگهای
اضافی در the_content()
🔍 ریشه مشکل چیست؟
وقتی در فایل /parts/page-content.php از تابع the_content() استفاده میکنید، وردپرس به صورت پیشفرض فیلتری به نام wpautop را روی محتوای پست اعمال میکند.
این فیلتر، تمام خطهای جدید (Enter) را به تگهای <p> و <br> تبدیل میکند که در بسیاری از قالبهای مدرن (مخصوصاً آنهایی که با Tailwind یا Page Builder ساخته شدهاند) باعث خرابی چیدمان میشود.
رفتار پیشفرض وردپرس:
محتوای شما در ویرایشگر:
سلام
این یک تست است
خط سوم
خروجی the_content():
<p>سلام<br />
این یک تست است<br />
خط سوم</p>
✅ راه حلهای رفع مشکل
راه حل اول: حذف موقت فیلتر wpautop
پیشنهادی ⭐
بهترین و امنترین روش این است که قبل از فراخوانی the_content() فیلتر را حذف کرده و بعد از آن دوباره اضافه کنید:
<?php
// حذف موقت فیلتر wpautop
remove_filter( 'the_content', 'wpautop' );
// نمایش محتوا بدون تگهای p اضافی
the_content();
// بازگرداندن فیلتر برای سایر بخشها
add_filter( 'the_content', 'wpautop' );
?>
💡 مزیت: این روش فقط روی همین بخش از صفحه تأثیر میگذارد و بقیه سایت (مثل ویرایشگر گوتنبرگ و کامنتها) بدون تغییر باقی میمانند.
راه حل دوم: استفاده از get_the_content()
تابع get_the_content() محتوای خام را برمیگرداند و فیلتر wpautop را به صورت خودکار اعمال نمیکند:
<?php
// دریافت محتوای خام بدون فیلتر wpautop
$content = get_the_content();
// اعمال فیلترهای دلخواه (مثل اجرای shortcode ها)
$content = apply_filters( 'the_content', $content );
// حذف فیلتر wpautop از خروجی
$content = wp_strip_all_tags( $content, false );
// نمایش محتوا
echo $content;
?>
⚠️ توجه: این روش ممکن است shortcode ها را اجرا نکند. اگر shortcode دارید، از روش اول استفاده کنید.
راه حل سوم: تابع سفارشی در functions.php
اگر میخواهید این تغییر را در کل قالب اعمال کنید، یک تابع سفارشی در functions.php بسازید:
// در فایل functions.php
function wtheme_the_content_without_p() {
remove_filter( 'the_content', 'wpautop' );
the_content();
add_filter( 'the_content', 'wpautop' );
}
// در فایل parts/page-content.php
<?php wtheme_the_content_without_p(); ?>
✨ مزیت: کد تمیزتر و قابل استفاده مجدد در کل قالب.
راه حل چهارم: غیرفعال کردن کامل در functions.php
اگر میخواهید فیلتر wpautop را کاملاً برای تمام سایت غیرفعال کنید:
// در فایل functions.php
remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );
⚠️ هشدار: این روش روی تمام سایت تأثیر میگذارد و ممکن است ظاهر کامنتها، ویجتها و برخی افزونهها را خراب کند. توصیه نمیشود مگر اینکه دقیقاً بدانید چه میکنید.
🛠️ مثال عملی برای فایل page-content.php
کد کامل و بهینه برای فایل /parts/page-content.php:
<?php
/**
* Template part for displaying page content
*
* @package WTheme
*/
// بررسی وجود محتوا
if ( have_posts() ) :
while ( have_posts() ) :
the_post();
// حذف موقت فیلتر wpautop برای جلوگیری از تگهای p اضافی
remove_filter( 'the_content', 'wpautop' );
?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<div class="entry-content">
<?php the_content(); ?>
</div>
</article>
<?php
// بازگرداندن فیلتر wpautop
add_filter( 'the_content', 'wpautop' );
endwhile;
endif;
?>
⚡ نکات مهم و طلایی
1
تأثیر روی Shortcode ها
اگر از shortcode ها (مثل Elementor، WPBakery یا shortcode های سفارشی) استفاده میکنید، حتماً از راه حل اول استفاده کنید تا shortcode ها به درستی اجرا شوند.
2
سازگاری با گوتنبرگ
اگر از ویرایشگر گوتنبرگ استفاده میکنید، بلوکهای گوتنبرگ به صورت خودکار HTML تمیز تولید میکنند و نیازی به wpautop ندارند. بنابراین حذف این فیلتر مشکلی ایجاد نمیکند.
3
تأثیر روی Excerpt
اگر میخواهید خلاصه پست (the_excerpt()) هم بدون تگهای p باشد، باید فیلتر را از آن هم حذف کنید:
remove_filter( 'the_excerpt', 'wpautop' );
4
تست بعد از تغییر
بعد از اعمال تغییرات، حتماً صفحات مختلف سایت (مقالات، برگهها، آرشیو) را بررسی کنید تا مطمئن شوید ظاهر آنها خراب نشده است.
✅ جمعبندی
مشکل تگهای <p> اضافی در وردپرس به دلیل فیلتر wpautop است که به صورت پیشفرض روی the_content() اعمال میشود.
بهترین راه حل استفاده از remove_filter() قبل و add_filter() بعد از فراخوانی محتوا است. این روش امن، تمیز و قابل استفاده مجدد است.
تیم توسعه wtheme.ir در تمامی قالبهای خود این نکته را رعایت کرده تا کاربران تجربهای بینقص از طراحی داشته باشند.
🎯 نیاز به کمک بیشتر دارید؟
اگر در رفع این مشکل یا شخصیسازی قالبهای wtheme.ir به کمک نیاز دارید، تیم پشتیبانی ما آماده کمک به شماست.