ویژگی تصویر

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

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

wp_cache_delete() یکی از توابع اصلی API حافظهٔ پنهان (Object Cache) در وردپرس است که برای حذف یک آیتم خاص از کش استفاده می‌شود. در این مقاله به صورت دقیق، مثال‌های عملی، نکات فنی و بهترین روش‌های استفاده از این تابع را بررسی می‌کنیم تا بتوانید کش برنامه‌های خود را به‌درستی مدیریت کنید.

تعریف کوتاه و کاربرد

تابع wp_cache_delete() یک کلید مشخص در گروه مشخصی از کش را حذف می‌کند. این تابع هم برای کش‌های موقتی (runtime) و هم برای کش‌های پایدار (persistent) که توسط drop-inهایی مثل Redis یا Memcached فراهم شده‌اند، کاربرد دارد.

امضای تابع و پارامترها

پارامترنوعتوضیح
keystringکلیدی که می‌خواهید حذف شود
groupstringگروهی که کلید در آن قرار دارد (اختیاری، پیش‌فرض ”)
persistentboolآیا حذف از کش پایدار هم انجام شود یا فقط کش زمان اجرا (پیش‌فرض false)
مقدار بازگشتیتوضیح
booltrue در صورت حذف موفق، false در غیر این صورت

مثال پایه

wp_cache_delete( 'my_cache_key', 'my_group' );

این خط کلید ‘my_cache_key’ را از گروه ‘my_group’ حذف می‌کند. اگر کش پایدار داشته باشید و بخواهید از حافظهٔ پایدار هم حذف شود، می‌توانید پارامتر سوم را true قرار دهید:

wp_cache_delete( 'my_cache_key', 'my_group', true );

در این حالت حذف از کش‌های پایدار (مثل Redis) نیز انجام می‌شود.

مثال عملی: حذف کش هنگام ذخیرهٔ پست

گاهی لازم است پس از به‌روزرسانی یک پست، کش مرتبط با آن را پاک کنید تا تغییرات فوری نمایان شوند. این مثال یک روش عملی را نشان می‌دهد.

function my_clear_post_cache_on_save( $post_id, $post, $update ) {
    $key = 'post_' . $post_id;
    wp_cache_delete( $key, 'posts' );
}
add_action( 'save_post', 'my_clear_post_cache_on_save', 10, 3 );

در این کد، هنگام ذخیرهٔ پست، کلیدی با نام post_{ID} از گروه posts حذف می‌شود. نام‌گذاری کلیدها و گروه‌ها را طوری انتخاب کنید که با سایر پلاگین‌ها تداخل نداشته باشد.

کار با Transients و تفاوت‌ها

Transients API در وردپرس گاهی از object cache استفاده می‌کند. اما برای حذف تراینت‌ها نباید مستقیماً از wp_cache_delete استفاده کنید؛ بلکه بهتر است از delete_transient() استفاده کنید که بررسی‌های لازم را انجام می‌دهد:

delete_transient( 'my_transient' );

با این حال اگر می‌دانید تراینت در object cache با کلیدی خاص ذخیره شده، می‌توانید آن کلید را با wp_cache_delete پاک کنید؛ ولی برای سازگاری با رفتار پیش‌فرض وردپرس توصیه می‌شود از توابع تراینت استفاده شود.

حذف چند کلید و بهینه‌سازی

wp_cache_delete برای حذف یک کلید طراحی شده است و API اصلی وردپرس تابعی برای حذف دسته‌ای ندارد. اگر نیاز دارید چندین کلید را حذف کنید، می‌توانید از حلقه استفاده کنید. برای بهینه‌سازی در کش‌های خارجی (مثلاً Redis) اغلب drop-inها متدهای اختصاصی برای حذف بر اساس پیشوند یا گروه دارند که سریع‌ترند.

$keys = array( 'k1', 'k2', 'k3' );
foreach ( $keys as $k ) {
    wp_cache_delete( $k, 'my_group' );
}

این روش ساده است اما اگر تعداد کلیدها زیاد باشد، بهتر است از امکانات bulk یا delete-by-prefix سرویس کش (در صورت پشتیبانی) استفاده کنید تا هزینهٔ ارتباط‌های مکرر کاهش یابد.

نکات امنیتی و طراحی: نامگذاری و نسخه‌بندی (namespacing & versioning)

  • همیشه از پیشوند اختصاصی برای کلیدها استفاده کنید تا با پلاگین‌ها یا تم‌های دیگر تداخل نداشته باشد.
  • برای کنترل ناسازگاری نسخه‌ها، می‌توانید در کلیدها یا گروه‌ها یک شماره نسخه یا id سایت (در مولتی‌سایت) اضافه کنید. به جای حذف همهٔ موارد، با تغییر نسخهٔ کلیدها عملاً کلیدهای جدید خوانده می‌شوند.
  • در مولتی‌سایت، ترکیب get_current_blog_id() در کلیدسازی از برخورد داده‌ها بین سایت‌ها جلوگیری می‌کند.

پاسخ‌گویی و ریسک‌ها

wp_cache_delete مقداری بولی برمی‌گرداند؛ اما همواره ممکن است عملیات حذف در لایهٔ کش پایدار با خطا مواجه شود (مثلاً اتصال به Redis قطع شود). بنابراین اگر پاک کردن کش برای عملیات حیاتی است، بهتر است شکست را ثبت (log) کنید یا راه‌حل fallback در نظر بگیرید.

مثال پیشرفته: حذف کش هنگام تغییر دسته‌بندی‌ها

function my_clear_category_cache( $term_id, $tt_id, $taxonomy ) {
    // فرض کنید برای هر دسته کلیدی داریم که فهرست پست‌ها را نگهداری می‌کند
    $key = 'category_posts_' . $term_id;
    wp_cache_delete( $key, 'category' );
}
add_action( 'edited_terms', 'my_clear_category_cache', 10, 3 );

این کد نشان می‌دهد که چگونه تغییرات taxonomy را با پاکسازی کش مرتبط کنیم تا کاربران لیست جدید را ببینند.

تفاوت با wp_cache_flush() و سایر توابع

  • wp_cache_delete: حذف یک آیتم مشخص
  • wp_cache_flush: پاکسازی کامل کش (runtime یا در برخی drop-inها نیز persistent)
  • delete_transient: پاکسازی تراینت‌ها با توجه به API وردپرس

استفاده از wp_cache_flush باید با احتیاط باشد، چون همهٔ آیتم‌ها را پاک می‌کند و می‌تواند بار زیادی بر سیستم وارد کند.

خلاصه و بهترین روش‌ها

  • از نامگذاری معنادار و namespace برای کلیدها استفاده کنید.
  • برای تراینت‌ها از توابع اختصاصی تراینت استفاده کنید.
  • در صورت استفاده از کش پایدار، از پارامتر persistent مناسب استفاده کنید.
  • برای حذف دسته‌ای بررسی کنید آیا drop-in شما قابلیت حذف بر اساس پیشوند یا گروه را دارد تا بهینه عمل کنید.
  • در hookهای مرتبط با ذخیره/ویرایش محتوا، کش‌های مرتبط را پاک کنید تا کاربران دادهٔ تازه ببینند.

در مجموع wp_cache_delete ابزاری ساده اما قدرتمند برای کنترل دقیق حافظهٔ پنهان در وردپرس است. طراحی صحیح کلیدها، استفادهٔ هوشمندانه از گروه‌ها و آگاهی از تفاوت بین کش موقتی و پایدار باعث می‌شود که سیستم کش شما هم قابل اعتماد و هم بهینه باشد.

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

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