تابع get_the_content در وردپرس
تابع get_the_content() یکی از توابع پایهای وردپرس برای دریافت محتوای پست (بدون فیلترهای نمایش) است. تفاوتهای مهمی بین get_the_content() و the_content() وجود دارد که آگاهی از آنها در زمان توسعه قالبها و افزونهها بسیار حیاتی است. در این مقاله به صورت کامل رفتار، پارامترها، مثالهای عملی و نکات امنیتی و بهینهسازی را بررسی میکنیم.
تفاوت اصلی: get_the_content() در مقابل the_content()
- get_the_content() فقط محتوای خام پست را برمیگرداند و بهصورت خودکار فیلترهایی مانند the_content را اجرا نمیکند.
- the_content() محتوای پست را با فیلترهای مربوطه (مثل shortcodes، wpautop و غیره) پردازش کرده و نتیجه را چاپ میکند.
امکانات و پارامترها
امضای تابع به صورت زیر است:
get_the_content( $more_link_text = null, $strip_teaser = false )توضیح پارامترها:
- $more_link_text: متن لینک «بیشتر» (more) که در صورت وجود تگاستفاده میشود.
- $strip_teaser: اگر true شود، مقدمه قبل از تگ more حذف میشود (به اصطلاح teaser را حذف میکند).
چرا معمولاً باید apply_filters(‘the_content’, …) را صدا بزنیم؟
چون بسیاری از فیلترها (مانند shortcodes، autop، و افزونههایی که محتوا را پردازش میکنند) روی هوک the_content متصل شدهاند. اگر فقط get_the_content() را بدون فیلترها استفاده کنید، خروجی خام خواهد بود و شورتکدها اجرا نمیشوند و پاراگرافبندی خودکار اعمال نمیشود.
مثال پایهای داخل حلقه (Loop)
// داخل فایل قالب مانند single.php یا داخل Loop
while ( have_posts() ) {
the_post();
$raw = get_the_content();
$content = apply_filters( 'the_content', $raw );
echo $content;
}توضیح: در این مثال ابتدا محتوای خام را با get_the_content() میگیریم سپس با apply_filters(‘the_content’, $raw) تمامی فیلترهای نمایش محتوا را اجرا کرده و در نهایت چاپ میکنیم. این روش معادل the_content() است اما کنترل بیشتری روی محتوا به ما میدهد.
دریافت محتوا خارج از Loop یا با استفاده از شناسه پست
// دریافت محتوای پست با استفاده از ID (ایمنتر از reliance روی global $post)
$post_id = 123;
$raw = get_post_field( 'post_content', $post_id );
$content = apply_filters( 'the_content', $raw );
echo $content;توضیح: get_post_field(‘post_content’, $post_id) مستقیماً فیلد محتوا را از دیتابیس میگیرد و مستقل از حلقه است. سپس دوباره از apply_filters برای اعمال فیلترها استفاده میکنیم.
کنترل رفتار تگ <!–more–> و global $more
برای کنترل نحوه نمایش محتوا هنگام وجود تگ more، میتوان متغیر جهانی $more را تغییر داد:
global $more;
$more = 0; // نمایش فقط بخش قبل از
$raw = get_the_content();
$content = apply_filters( 'the_content', $raw );
echo $content;توضیح: با قرار دادن $more = 0، وردپرس فقط قسمت قبل از تگ more را نمایش میدهد. در حالت عادی مقدار $more ممکن است به صورت خودکار توسط the_content مدیریت شود، بنابراین در زمانی که از get_the_content استفاده میکنید بهتر است مقدار آن را صریح تنظیم کنید.
نکات امنیتی و بهینهسازی
- برای خروجی HTML از اعمال escape تهاجمی خودداری کنید، چون apply_filters(‘the_content’) خروجیای با HTML تولید میکند. اگر داده از منبع نامطمئن است، از wp_kses_post یا سایر توابع فیلتر برای مجازسازی تگها استفاده کنید.
- اجتناب از اجرای دوباره فیلترها: اگر از the_content() استفاده کردهاید، دوباره apply_filters روی همان متن باعث اجرای مضاعف فیلترها میشود که ممکن است نتیجه نادرست تولید کند.
- در مواردی که محتوای زیادی دارید و چندین بار آن را نیاز دارید، کش سطح اپلیکیشن (مثل wp_cache_set/get یا transient) میتواند عملکرد را بهبود دهد.
مقایسه کوتاه توابع مرتبط
| تابع | خروجی | زمان مناسب استفاده |
|---|---|---|
| get_the_content() | محتوای خام (بدون فیلتر) | زمانی که میخواهید کنترل روی فیلترها داشته باشید |
| the_content() | محتوا پس از اعمال فیلترها (و چاپ) | معمولاً داخل قالب برای نشان دادن محتوا |
| get_post_field(‘post_content’, $id) | محتوا از یک پست مشخص | وقتی خارج از Loop یا با ID کار میکنید |
بهینهسازی مثال: استفاده بهینه و امن
// بهینهسازی: کش کردن خروجی فیلترشده و استفاده از wp_kses_post در صورتی که لازم است
$post_id = 123;
$cache_key = 'filtered_content_' . $post_id;
$content = wp_cache_get( $cache_key );
if ( false === $content ) {
$raw = get_post_field( 'post_content', $post_id );
$content = apply_filters( 'the_content', $raw );
// اگر لازم است فقط تگهای امن را نگه داریم:
// $content = wp_kses_post( $content );
wp_cache_set( $cache_key, $content, '', 3600 );
}
echo $content;توضیح: این نمونه خروجی فیلترشده را در کش داخلی وردپرس ذخیره میکند تا از اجرای مکرر فیلترها جلوگیری شود. در صورت نیاز به محدود کردن تگهای HTML، از wp_kses_post استفاده کنید.
جمعبندی
get_the_content() ابزار قدرتمندی برای زمانی است که نیاز به دستکاری یا پردازش سفارشی محتوای پست دارید. اما به خاطر داشته باشید که این تابع محتوای خام را بازمیگرداند و برای نمایش نهایی معمولاً باید apply_filters(‘the_content’, $content) را اجرا کنید تا شورتکدها، wpautop و فیلترهای افزونهای اعمال شوند. با رعایت نکات امنیتی و بهینهسازی میتوانید از آن در قالبها و افزونهها بدرستی بهره ببرید.
آیا این مطلب برای شما مفید بود ؟




