وردپرس خود را با ذخیره درخواستهای سفارشی با استفاده از Transients API سرعت بخشید

ای پسر ، عنوان ترسناک به نظر می رسد ، اینطور نیست. شما جای نگرانی ندارید زیرا ما همه آن را خراب خواهیم کرد. آیا موضوع شما از نمایش داده های سفارشی وردپرس استفاده می کند تا پستهای تصادفی ، پست های محبوب ، پست های اخیر و غیره در نوار کناری یا هر جای دیگر؟ اگر بله ، پس باید برای ذخیره سازی این سeriesال ها از API گذرا وردپرس برای کاهش مصرف منابع و همچنین کمک به زمان بارگیری استفاده کنید. در این مقاله ، ما به شما نشان خواهیم داد که چگونه با وردپرس جستجوی سفارشی با استفاده از Transients API ، سایت وردپرس خود را تسریع کنید.

توجه: برای اینکه این پست را دنبال کنید ، باید نحوه کار مضامین وردپرس (حلقه ها و غیره) را بدانید.

بنابراین این کل حافظه پنهان و گذرا بیش از سر من است. خوب نگران نباشید اجازه دهید توضیح دهیم که چه کاری انجام می دهد. اساساً اگر سایتی مانند List25 را اجرا می کنید و یک حلقه دارید که 6 پست تصادفی را در نوار کناری شما نشان می دهد ، سپس API گذرا می تواند کمک کند. هر بار که کاربر صفحه را تازه می کند ، آن جستجوی WP سفارشی که دارید در پایگاه داده شما قرار می گیرد و به طور تصادفی 6 پست را می کشد. اگر سایت نسبتاً جدیدی هستید ، نباید بد باشد. اما اگر تعداد زیادی از افراد را به سایت خود جذب می کنید ، می تواند سرور SQL شما را خراب کند و صفحه “خطا در ایجاد اتصال پایگاه داده” را مشاهده خواهید کرد. با افزودن چند خط کد اضافی ، می توانید به راحتی و با استفاده از Transients API نتایج حاصل از آن را ذخیره کنید (آن را در حافظه پنهان ذخیره کنید).

مثالی از کد حلقه ای که برای کشیدن پست های تصادفی در اختیار داشتیم:

 have_posts ()): $ random_query-> the_post ()؛
؟>


جالبترین قسمت مربوط به درخواست ارسال تصادفی ما در نوار کناری این بود که هر بار محتوای جدیدی را نشان می داد. بنابراین با حافظه پنهان کردن پرس و جو به مدت 12 ساعت ، 6 پست مشابهی خواهیم داشت که به مدت 12 ساعت نشان داده می شوند؟ خوب ، ما به لطف پیشنهاد دوستمان Konstantin Kovshenin (@ kovshenin) یک کار پیدا کردیم. وی پیشنهاد داد که به جای استفاده از WP_Query ، از get_posts استفاده کنیم و به جای آن 20 پست بکشیم. با استفاده از API transients ، نتایج آن پرس و جو را پنهان کرده و سپس با استفاده از تابع () array_rand فقط 6 پست از 20 اصلی را به صورت تصادفی نشان می دهد. به این ترتیب می توانیم اثر تصادفی را در سایت شبیه سازی کنیم.

اولین کاری که کردیم این بود که گذرا را تنظیم کنیم. ما کد را از صفحه WordPress Codex دریافت کردیم.

// هرگونه نسخه موجود از داده های گذرا ما را دریافت کنید
اگر (false === ($ special_query_results = get_transient ('special_query_result))))) {
    // آنجا نبود ، بنابراین داده ها را دوباره تولید کنید و گذرا را ذخیره کنید
$ randargs = array ('orderby' => 'rand'، 'numberposts' => 20)؛
$ special_query_results = get_posts ($ randargs)؛
    set_transient ('special_query_resultes'، $ special_query_result، 60 * 60 * 12)؛
}

توجه کنید 60 * 60 * 12 ناحیه ای است که می توانید طول حافظه نهان را در آن کنترل کنید. در صورت تمایل آن را به هر آنچه دوست دارید تغییر دهید. حال اگر $ special_query_results $ را با استفاده از حلقه foreach نشان دهیم ، همه 20 پست نمایش داده می شود. بنابراین ما باید از تابع () array_rand استفاده کنیم تا فقط 6 مورد را به صورت تصادفی بکشیم. کد را به این شکل اضافه کردیم:

$ randomposts = get_transient ('special_query_resultes')؛
$ randkey = array_rand ($ randomposts ، 6) ؛

اکنون با این کار 6 شناسه ارسال به طور تصادفی از داده های گذرا ما خارج می شود. با این حال ، مقادیر مربوط به هر پست را نمی کشد. بنابراین ما مجبور شدیم این بیت کد را اضافه کنیم:

$ sixposts [0] = $ randomposts [$ randkey [0]]؛
$ sixposts [1] = $ randomposts [$ randkey [1]]؛
$ sixposts [2] = $ randomposts [$ randkey [2]]؛
$ sixposts [3] = $ randomposts [$ randkey [3]]؛
$ sixposts [4] = $ randomposts [$ randkey [4]]؛
$ sixposts [5] = $ randomposts [$ randkey [5]]؛

اساساً ما یک آرایه برای $ sixpost ایجاد کردیم که در آن به هر یک از آن موارد مقدار اختصاص می دهیم. مطمئن نیستم که آیا این بهترین روش برای ادامه کار بود ، اما جواب داد. اگر هرکدام از شما پیشنهادهای بهتری دارید ، در صورت تمایل آن را در نظرات ارسال کنید.

پس از انجام این کار ، اکنون آماده نمایش حلقه هستیم. به سادگی کد را به صورت زیر قرار دهید:

پست جهانی $؛ // لازم است تا کار کند
foreach (شش ارسال به عنوان $ post): setup_postdata ($ post)؛

// همه موارد به اینجا می روند.

endforeach؛

setup_postdata به شما امکان می دهد از همه برچسب های حلقه در داخل این حلقه foreach مانند پیوند ثابت_ و غیره استفاده کنید.

برای سهولت در همه ، کد نهایی موجود در اینجا است:

 'rand'، 'numberposts' => 20)؛
$ special_query_results = get_posts ($ randargs)؛
    set_transient ('special_query_resultes'، $ special_query_result، 60 * 60 * 12)؛
}

// از داده هایی استفاده کنید که معمولاً در اختیار دارید ...
$ randomposts = get_transient ('special_query_resultes')؛
$ randkey = array_rand ($ randomposts ، 6) ؛
$ sixposts [0] = $ randomposts [$ randkey [0]]؛
$ sixposts [1] = $ randomposts [$ randkey [1]]؛
$ sixposts [2] = $ randomposts [$ randkey [2]]؛
$ sixposts [3] = $ randomposts [$ randkey [3]]؛
$ sixposts [4] = $ randomposts [$ randkey [4]]؛
$ sixposts [5] = $ randomposts [$ randkey [5]]؛

پست جهانی $؛
foreach (شش ارسال به عنوان $ post): setup_postdata ($ post)؛ ؟>




با این وجود ، هر تعداد کاربر از سایت شما بازدید می کنند ، شما فقط هر 12 ساعت یک بار این پرس و جو DB را انجام می دهید.

منبع:
https://www.wpbeginner.com/wp-tutorials/speed-up-your-wordpress-by-caching-custom-queries-using-transients-api/.

دیدگاهتان را بنویسید


Fatal error: Uncaught wfWAFStorageFileException: Unable to save temporary file for atomic writing. in /home/wekjriusd1/public_html/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/storage/file.php:35 Stack trace: #0 /home/wekjriusd1/public_html/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/storage/file.php(659): wfWAFStorageFile::atomicFilePutContents('/home/wekjriusd...', '<?php exit('Acc...') #1 [internal function]: wfWAFStorageFile->saveConfig('livewaf') #2 {main} thrown in /home/wekjriusd1/public_html/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/storage/file.php on line 35