کش کردن هوشمند داده‌ها در وردپرس با Transients API

در این قسمت به نحوه اصولی کش‌کردن داده‌ها در وردپرس با Transients APIرا بررسی می‌کنیم.

پشتیبان گرفتن در وردپرس

Transients API چیست؟

Transients API یک روش ساده و استاندارد را برای ذخیره داده‌ها به صورت موقت در پایگاه داده با یک نام و بازه زمانی زندگی برای آن دادها، فراهم می‌کند. بعد از به پایان رسیدن زمان تعیین شده اطلاعات حذف می‌شوند و دیگر قابل دستیابی نیستند.
اگر درسایت خود به داده‌ای نیاز دارید که به ندرت به روزرسانی می‌شوند و در تهیه هر بار این داده‌ها زمان زیادی صرف می شود ولی نیازی نیست که هربار این اطلاعات ساخته شوند می‌توانید از Transients API برای ذخیره موقت این داده‌ها استفاده کنید تا در هر بار استفاده از این داده نیازی به تولید دوباره آن نداشته باشید. با این کار می‌توانید زمان لود صفحات را کاهش داده و درصد استفاده سایت از منابع سرور را کاهش دهید.

نحوه ذخیره و بازیابی داده‌های کش بوسیله Transients API

توابع اصلی که در هنگام ذخیره و بازیابی داده‌های مد نظر جهت کش شدن استفاده می‌کنیم توابع set_transient و get_transient هستند. تابع set_transient که از آن برای ذخیره داده کش استفاده می‌کنیم.
<?php set_transient( $transient, $value, $expiration ); ?>


این تابع سه متغیر ورودی دارد. نخست ‎$‎transient‎که نام قطعه داده‌ای است که باید کش شود. این نام در واقع شناسه یکتای آن داده است که در آینده از آن برای بازیابی داده‌های کش شده استفاده می‌کنیم. متغیر دوم ‎$value‎همان داده‌ای است که قصد کش کردن آن را داریم و از متغیر سوم یعنی ‎$expiration‎برای تعیین بازه زمانی که می‌خواهیم داده‌ها کش شوند استفاده می‌کنیم. توجه داشته باشید که مقدار این پارامتر بر حسب ثانیه است و وردپرس بعد از اتمام این زمان داده‌ها را از بانک اطلاعاتی حذف می‌کند.
زمانی که شما داده‌ای را ذخیره کردید می‌توانید به راحتی با تابع get_transient و شناسه آن داده، داده را بازیابی کنید.
<?php get_transient( $transient ); ?>


همان طور که قبل‌تر اشاره کردیم برای بازیابی داده‌ها به شناسه یکتای آن داده نیاز داریم. با ارسال این شناسه به تابع get_transient می‌توانیم به آن داده دسترسی پیدا بکنیم. این تابع دو نوع خروجی دارد. اول مقدار داده کش شده است و یا اینکه مقدار false به همین دلیل بعد از استفاده از این تابع می‌بایست بررسی کنیم که چه نوع داده‌ای در آن وجود دارد. می‌بایست در کدهای خود تمهیداتی را برای زمانی که داده‌های کش حذف شده‌اند در نظر بگیرید.
نکته ظریفی که در این قسمت وجود دارد این است که Transients API در هنگام عدم وجود داده مقدار false منطقی که با صفر مشخص می‌شود را به خروجی ارسال نمی‌کند چون این امکان وجود دارد که مقدار صفر همان داده‌ای باشد که آن را کش کرده باشید و به همین دلیل مقدار false را در یک آرایه قرار داده و آن را به خروجی ارسال می‌کند که برای تشخیص آن می‌توان از عملگر شناسایی یکتا (===) به جای عملگر برابری (==) استفاده کرد. به صورت زیر:
if ( false === ( $value = get_transient( 'value' ) ) ) {
// this code runs when there is no valid transient set
}

حذف داده‌های کش شده بوسیله Transients API

برای حذف داده‌های کش شده از تابع delete_transient استفاده می‌کنیم که شکلی یکسان با تابع get_transient که پیش‌تر بررسی کردیم دارد با این تفاوت که این تابع با دریافت شناسه داده کش شده آن را حذف می‌کند.
<?php  delete_transient( $transient ); ?>

استفاده از Transient API در عمل

در اینجا می‌خواهیم برای شفافیت موضوع نحوه استفاده عملی از Transients API را بررسی کنیم. در این مثال می‌خواهیم داده‌های یک فید را دریافت و آنها را نمایش دهیم. دانلود این فید در هر بار نمایش و ساختن یک لیست HTML از آیتم‌های آن کار مناسبی نیست چون در هر بار دانلود و ساختن لیست خروجی آن فید زمان زیادی صرف دانلود و ساختن کد خروجی می‌شود که اینکار مخصوصا در سایت‌های پر بازدید می‌تواند باعث افت سرعت لود صفحات گردد. اما می‌خواهیم با استفاده از Transients API این فید را یکبار دانلود و برای ۲ ساعت از آن اطلاعات استفاده کنیم و پس از ۲ ساعت دوباره آن را دریافت کنیم و به همین منوال…با اضافه کردن چند خط کد می‌توان از دانلود هزاران بار این اطلاعات جلوگیری کرد. در کد زیر این کار را به صورت عملی پیاده‌سازی کرده ایم.

<?
// get data
$rss_itemslist = get_transient("wp_feed");
 
// for reading rss feed
include_once(ABSPATH . WPINC . '/feed.php');
 
// when data cached
if ($rss !== FALSE){
    // print chached feed items list
    echo $rss_itemslist;
}
// when data not cached
else{
 
    // Download feed and generate items
    $rss_itemslist = fetch_feed("http://feeds.irtuts.com/irtuts/wp");
    $max_items = $rss_itemslist->get_item_quantity(10);
    $items = $rss_itemslist->get_items(0, $max_items);
 
    // Generate HTML liat of feed items
    $fresh_list ="<ol>";
    foreach ( $items as $item )
        $fresh_list .= '<li>
          <a href="' . $item->get_link(); . '">' . $item->get_title();' .</a>
        </li>';
    $fresh_list .= '</ol>';
 
    // save fresh feed items list
    set_transient("wp_feed" , $fresh_list ,60*60*2 );
 
    // print fresh feed items list
    echo $rss_itemslist;
}
?>

در مرکز کد و در قسمت if بررسی می‌کنیم که داده‌ای از قبل در کش وجود دارد و در صورت عدم وجود در قسمت else دوباره لیست آیتم‌های آن فید را تولید می‌کنیم.


























آدرس : کرج – گوهردشت – خیابان اصلی گوهردشت – بین خیابان نهم و دهم غربی– بالای بانک مهر– پلاک252 – واحد11
تلفن تماس :34483769- 026, 34496534- 026, 34496506- 026
ایمیل : Karaj@azaranweb.com



نکاتی جهت امن سازی وردپرس

امن کردن وردپرس برای تمام کاربرانی که از این سیستم استفاده میکنند بسیار توصیه میشود. یکی از راههای امن کردن وردپرس استفاده از برخی افزونه های امنیتی نظیر WP Security Scan و WP Firewall میباشد. این افزونه ها را میتوانید دانلود کرده و بر روی وردپرس خود نصب کنید.
بعد از اینکه افزونه نصب فعال شد، میتوانید آن را از طریق بخش امنیت واقع در مدیریت وردپرس تنظیم کنید.
WP Security Scan موارد امنیتی زیر را تحت پوشش قرار میدهد:
1. نسخه وردپرس شما را چک میکند و چنانچه نسخه وردپرس شما قدیمی شده باشد به شما اطلاع میدهد که وردپرس خود را به روز رسانی کنید.
2. به شما این امکان را میدهد که پیشوند جداول دیتابیس وردپرس را تغییر داده و چیزی غیر از _wp را جایگزین آن کنید. این مورد بسیار حائز اهمیت میباشد و از هک شدن دیتابیس (SQL Injection) تا حد زیادی جلوگیری میکند. (توصیه میشود که قبل از انجام این مرحله، از دیتابیس خود بک آپ تهیه کنید).
3. نسخه وردپرس شما را از دید بازدید کنندگان مخفی میکند.
4. غیرفعال کردن نمایش خطاهای دیتابیس و در نتیجه جلوگیری از لو رفتن اطلاعات
5. حذف WP ID Meta tag از هسته وردپرس
6. اخطار در صورت وجود یک حساب کاربری مدیر پیشفرض
7. اخطار در صورت عدم وجود فایل htaccess. در پوشه wp-admin

همچنین این پلاگین، سطوح دسترسی دایرکتوری های وردپرس را بررسی میکند تا از حملات و نفوذ غیرمجاز جلوگیری شود. این افزونه همچنین دارای قابلیت ساختن پسورد نیز میباشد و با استفاده از آن میتوانید پسوردهای قدرتمند ایجاد نمایید.
افزونه WP Firewall درخواست های SQL مشکوک و همچنین ترافیک های مشکوک را مسدود و بلوکه میکند. در صورت مشاهده یک حمله، وردپرس میتواند حمله کننده را به یک صفحه 404 پیش ساخته برده و یا او را به صفحه اصلی وبلاگ برگرداند. همچنین این افزونه میتواند یک اخطار از طریق ایمیل در هنگام بروز حمله برای شما ارسال نماید.
یک کلمه عبور قدرتمند همیشه تا حد زیادی از هک شدن وبلاگ و یا وب سایت شما جلوگیری میکند. یک پسورد قدرتمند حداقل باید دارای 8 کاراکتر بوده و شامل لغات و کلمات موجود در لغت نامه و نیز شامل نام کاربری شما نباشد. یک پسورد خوب و قوی باید دارای ترکیبی از حروف بزرگ، حروف کوچک، اعداد و نشانه ها باشد. این مورد نه تنها شامل کلمات عبور، بلکه شامل نام کاربری و نام دیتابیس شما نیز میشود.

نکته:

1. همیشه وردپرس، قالبها و افزونه های آن را به روز رسانی کنید. در صورت عدم توجه به این مساله، سایت شما مورد حمله هکرها واقع شده و به سادگی هک خواهد شد.
2. دسترسی به بخش مدیریت وردپرس را محدود کنید و سعی کنید به کسی غیر از خودتان اجازه ورود به بخش مدیریت را ندهید. همچنین بهتر است امکان ثبت نام کاربر جدید را غیرفعال کنید.
3. چنانچه سایت شما تجاری است از SSL برای ارتقا سطح امنیت وب سایت خود استفاده کنید.