ویژگی تصویر

آموزش تابع get_the_content() در وردپرس و کاربرد آن

  /  وردپرس   /  تابع get_the_content در وردپرس
بنر تبلیغاتی الف
wp - wordpress - وردپرس

تابع 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 و فیلترهای افزونه‌ای اعمال شوند. با رعایت نکات امنیتی و بهینه‌سازی می‌توانید از آن در قالب‌ها و افزونه‌ها بدرستی بهره ببرید.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: