حتما شما هم نام WordPress را شنیده اید. وردپرس یک سیستم مدیریت محتوا (content managing system) است که در سال 2003 ارائه شد و با استفاده از آن می توانیم وب سایت یا وبلاگ خود را مدیریت کنیم. اگر شما هم از وب سایت های وردپرسی استفاده می کنید حتما متوجه شده اید که پس از چند سال استفاده، پایگاه داده ی شما پر از کاراکتر های عجیب و غریب و داده هایی باشد که مورد نیاز شما نیست. در این مقاله شما را با کوئری های SQL ای آشنا خواهیم کرد که با استفاده از آن ها می توانید به پاکسازی پایگاه داده در وردپرس بپردازید.
در قسمت قبل با برخی از این کوئری ها آشنا شدیم و در این قسمت می خواهیم کوئری های بیشتری را با هم بررسی کنیم. درست مانند جلسه ی قبل، قبل از شروع کار باید به دو نکته توجه کنید:
_wp
(پیشوند جدول) را با پیشوند استفاده شده در سایت خود تغییر دهید تا کوئری ها کار کنند.shortcode های وردپرس برای قرار دادن اطلاعات در مقالات (بدون ویرایش تم ها) مفید هستند. امروزه نیز بسیاری از افزونه های وردپرسی قابلیت shortcode را ارائه می دهند تا داده ها را از درون ادیتور وردپرس یکپارچه سازی کنیم. مشکل آنجاست که shortcodes های بی استفاده می توانند مشکلاتی برای کاربران ایجاد کنند؛ زمانی که دیگر از shortcode ها استفاده نکنید (مثلا تم سایت را عوض کنید) متوجه می شوید که این shortcode ها به طور کامل درون محتوای شما قرار گرفته اند. کوئری SQL زیر می تواند آن ها را برای شما حذف کند. به جای [tweet]
باید shortcode مورد نظر خود را بنویسید:
UPDATE wp_post SET post_content = replace(post_content, '[tweet]', '' ) ;
Post meta اطلاعاتی هستند که مربوط به پست های سایت می شوند. زمانی که یک فیلد شخصی سازی شده را می سازید اطلاعات آن به عنوان meta ذخیره شده و می تواند پس از دریافت روی وب سایت شما نمایش داده شود. اگر از چنین فیلدهایی استفاده می کنید اما دیگر آن ها را لازم ندارید می توانید با کوئری زیر آن ها را از پایگاه داده حذف کنید:
DELETE FROM wp_postmeta WHERE meta_key = 'YourMetaKey';
در چند سال گذشته tag ها بسیار محبوب بودند و تمام وبلاگ نویسان از آن ها استفاده می کردند. در این بین برخی از مدیران سایت ها دیگر از این تگ ها استفاده نمیکنند؛ اگر شما هم جزو این دسته هستید می توانید با اجرای کوئری زیر تمام این tag ها را حذف کرده و فضای بیشتری برای پایگاه داده ایجاد کنید:
DELETE FROM wp_terms WHERE term_id IN (SELECT term_id FROM wp_term_taxonomy WHERE count = 0 ); DELETE FROM wp_term_taxonomy WHERE term_id not IN (SELECT term_id FROM wp_terms); DELETE FROM wp_term_relationships WHERE term_taxonomy_id not IN (SELECT term_taxonomy_id FROM wp_term_taxonomy);
وردپرس feed cache را در جدول wp_options
ذخیره می کند. اگر می خواهید feed cache را حذف کنید از کوئری زیر استفاده کنید:
DELETE FROM `wp_options` WHERE `option_name` LIKE ('_transient%_feed_%')
transient ها در واقع یک قابلیت cache در وردپرس هستند. transient ها برای ذخیره ی داده هایی استفاده می شوند که فرآیند دریافت آن ها طولانی است اما با استفاده از transient ها به سرعت دریافت می شوند. با اینکه transient ها قابلیت بسیار مناسبی برای سایت ما هستند اما فضای زیادی را اشغال می کنند و اگر بدون مدیریت روی هم انباشته شوند سرعت سایت را پایین می آورند. برای پاک کردن transient ها باید از کوئری پیشرفته ی زیر استفاده کنید:
DELETE FROM `wp_options` WHERE `option_name` LIKE ('%\_transient\_%');
نگران حذف transient ها نباشید! در صورت نیاز وردپرس آن ها را دوباره ایجاد می کند.
Revision ها قابلیتی کاربردی در وردپرس هستند اما اگر هر از چند گاهی آن ها را حذف نکنید، پایگاه داده تان بسیار بزرگ خواهد شد. کوئری زیر Revision ها را به همراه metadata آن ها حذف می کند:
DELETE a,b,c FROM wp_posts a WHERE a.post_type = 'revision' LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id) LEFT JOIN wp_postmeta c ON (a.ID = c.post_id);
برخی اوقات پست هایی را پیدا می کنید که بسیار قدیمی هستند و دیگر نمی خواهید آن ها را روی سایت داشته باشید. کد زیر تمام پست هایی که 600 روز از تاریخ پست شدنشان گذشته باشد حذف می کند. شما می توانید این عدد را تغییر دهید. یک ترفند جالب ترکیب این دستور با دستور قبلی برای حذف پست ها + metadata آن ها است:
DELETE FROM `wp_posts` WHERE `post_type` = 'post' AND DATEDIFF(NOW(), `post_date`) > 600
زمانی که کسی روی وب سایت وردپرسی شما کامنت می گذارد، وردپرس user agent فرد را ذخیره می کند. user agent ها برای بررسی آمار و اطلاعات مفید هستند اما برای 90 درصد وبلاگ نویسان هیچ استفاده ای ندارند. به همین دلیل می توانید با استفاده از کوئری زیر user agent ها را تبدیل به یک رشته ی خالی کنید تا جای کمتری در پایگاه داده بگیرند:
update wp_comments set comment_agent ='' ;
تمام داده های وردپرس در پایگاه داده ذخیره می شوند بنابراین می توانیم به راحتی با دستورات SQL آن ها را ویرایش کنیم. مثلا برای به روز رسانی آدرس ایمیل امین می توانید از کوئری زیر استفاده کنید:
UPDATE `wp_users` SET `user_email` = "new_email_address" WHERE `wp_users`.`user_login` = "admin";
شما می توانید از این کوئری برای به روز رسانی ایمیل هر کاربری در wp_users
استفاده کنید؛ کافی است admin
را با یوزرنیم حساب مورد نظر تعویض کنید.
برخی اوقات یک افزونه ی مشکل دار تمام سایت شما را از کار می اندازد. اگر مشکل جدی باشد حتی نمی توانید به wp_admin
دسترسی داشته باشید تا پلاگین را غیر فعال کنید. در این صورت بهترین راه شما غیر فعال کردن تمام پلاگین ها به صورت یکجا است:
UPDATE wp_options SET option_value = '' WHERE option_name = 'active_plugins';
به احتمال زیاد بعد از اجرای این دستور مشکل شما حل خواهد شد.
وردپرس تنظیمات سایت شما را در wp_options
ذخیره می کند بنابراین می توانید به راحتی و با یک دستور SQL تم وردپرس خود را تغییر دهید. این دستور زمانی به درد می خورد که تم شما مشکل دار بوده و حالا نمی توانید به محیط داشبورد دسترسی داشته باشید. دستور زیر تم Twenty Nineteen را غیر فعال می کند:
UPDATE wp_options SET option_value = 'twentynineteen' WHERE option_name = 'template' or option_name = 'stylesheet';
برخی اوقات نیاز داریم که attribution نویسنده را در چندین پست به صورت یکجا تغییر دهیم. در این صورت ابتدا باید ID های کاربران وردپرس را جمع کنید. زمانی که وارد MySQL شدید کوئری زیر را وارد کنید تا لیستی از کاربران به همراه ID هایشان ببینید:
SELECT ID, display_name FROM wp_users;
فرض کنید NEW_AUTHOR_ID
آیدی نویسنده ی جدید و OLD_AUTHOR_ID
آیدی نویسنده ی قبلی باشد. با استفاده از کوئری زیر می توانید نویسنده ی جدیدی برای تمام پست ها تعیین کنید:
UPDATE wp_posts SET post_author=NEW_AUTHOR_ID WHERE post_author=OLD_AUTHOR_ID;
با این کار نویسنده ی تمام پست ها به نام نویسنده ی جدید تغییر می کند.
سوال: آیا این دستورات امن هستند؟
پاسخ: بله تمامی این دستورات امن و تست شده اند اما هیچ گاه نمی توان امنیت چیزی در محیط وردپرس را تضمین کرد (به دلیل وجود فاکتور های متعدد و مختلف) بنابراین حتما و حتما قبل از اجرای این دستورات از پایگاه داده ی خود یک نسخه ی بکاپ بگیرید. در صورت بروز هرگونه صدمه یا خطا در پایگاه داده، مسئولیتی متوجه تیم روکسو نخواهد بود.
امیدوارم از دومین قسمت مقاله پاکسازی پایگاه داده در وردپرس لذت برده باشید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.