چگونه هزاران نوشته وردپرس را تنها با یک دستور SQL ویرایش کنیم؟


مالکیت و مدیریت یک بلاگ وردپرس جنبههای سرگرم کنندهی زیادی دارد، به خصوص زمانی که تازه این کار را آغاز کرده باشید. طراحی وبسایت و انتخاب قالب جذاب، نوشتن نخستین مطالب نخست و پیشبینی کردن این که حجم بالایی از افراد مشتاق خواندن نوشتههای شما خواهند بود، همگی جنبههای مختلفی از این سرگرمی را تشکیل میدهند. البته زمان زیادی طول نمیکشد تا واقعیت مشخص شود که شما دیگر قالب خود را دوست ندارید، حجم خوانندگان بسیار پایین است و دریابید که میزبان وبسایت، امکاناتی که شما میخواستید را ندارد.
رشد یک بلاگ به سالها زمان نیاز دارید و در طی این مدت رنج و مرارتهای زیادی باید متحمل شد. زمانی که متوجه شوید میبایست تغییرات عمدهای روی بلاگ ایجاد کنید، همزمان درمییابید که این مسئله به کار زیادی نیاز دارد. چند تغییر عمده هستند که میبایست بر روی اکثر بلاگها در این مرحله ایجاد کرد، اما یکی از آنها از این واقعیت ناشی میشود که برخی بلاگرها از روشهای دستی برای برخی کارها مثلاً درج تبلیغات در میان نوشتهها استفاده میکنند.
تغییر دادن نوشتهها با یک دستور منفرد SQL
مشکل این است که پس از چند سال مدیریت یک بلاگ، یک روز متوجه میشوید که نزدیک به 1000 نوشته دارید که روی همه آنها برخی تغییرات دستی ایجاد کردهاید. اگر بخواهید این تغییرات را ملغی کنید باید هزاران نوشته را به صورت دستی ویرایش کنید.
مثلاً در مورد درج خودکار تبلیغات میتوانید از افزونهای استفاده کنید که از این به بعد این کار را اتوماتیک انجام دهد. اما این مسئله نیز برای نوشتههای پس از این معتبر است و مقالات قدیمی در واقع با دو تبلیغ نمایش مییابند.
برای حذف تبلیغات از نوشتههای قدیمی میتوان از دستورهای SQL کمک گرفت. این عمل در نرمافزار phpMyAdmin صورت میگیرد و بدین منظور ابتدا باید پایگاه داده مربوط به بلاگ را در منوی سمت چپ انتخاب کنید.
کدی که قرار است استفاده کنیم تا بخشهایی از محتوای مقالات را از آن جدا کنیم در تگ SQL قرار میگیرد. منظور ما از این حرف آن است که با استفاده از این کد میتوانید بخشهای خاصی از همه نوشتههای وردپرس را که تعیین میکنید، از 2 تا 200 نوشته وردپرس و یا بیشتر را از آن حذف کنید. تنها نیازمندی برای این کار آن است که بخشی که میخواهید حذف کنید با متن مشخصی شروع شده و با متن مشخصی نیز پایان یابد. تبلیغات گوگل چنین وضعیتی دارد و با تگ خاصی شروع شده و با تگ معینی بسته میشود.
در تصویر زیر نوشتههای بلاگ در قالب جدید نمایش یافته که همانطور که میبینید تبلیغات به صورت دستی درست پس از تگ «more» در همه صفحهها در سمت راست به صورت دستی قرار گرفته است.
روش درج این بخش در کد نوشته قابل مشاهده است:
همین طور که میبینید یک «script type» داریم که تگ شروع تبلیغات است و «script src» در انتهای تبلیغات آمده است. بنابراین روش کار چنین است. شما باید به SQL دستوری بدهید که میخواهید این بخش از نوشته خود را به طور کامل حذف کرده و آن را بهروزرسانی (update) کنید. بدین منظور باید سه تابع مقدماتی SQL به نامهای Replace، Substr و Locate را بشناسید.
ابتدا از LOCATE استفاده میکنیم تا به پایگاه داده بگوییم که موقعیتهای شروع و پایان تبلیغات را در نوشتهها بیابد. در هر مورد از نوشتههای آغازین و پایانی بخشی که میخواهیم حذف کنیم استفاده شده است. موقعیت شروع در صفحه چنین است:
LOCATE ('<script type="text/javascript">', post_content)
موقعیت پایان کمی پیچیدهتر است. با استفاده از تابع locate محل شروع نوشته را میتوانید بیابید. بنابراین باید تعداد کاراکترهای این بخش را تا انتهای تبلیغات بشمارید تا محل پایان را بیابید.
LOCATE('<script src='http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">', post_content) + 93
سپس باید به پایگاه داده بگویید که تابع «REPLACE» دقیقاً باید چه چیزی را تغییر دهد. این کار با استخراج رشته واقعی از محتوای نوشتهها با استفاده از تابع SUBSTR صورت میگیرد. میبایست محل شروع این بخش (که اینک میدانیم) و طول متن را به این تابع ارسال کنید. طول متن با کم کردن محل آغازین از محل نهایی (که آن را نیز داریم) به دست میآید. در این مرحله دستور ما با درج کد بخش تبلیغات به صورت زیر در میآید:
substr(post_content, locate('<script type="text/javascript">', post_content), ((locate('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">', post_content) + 93) - (locate('<script type="text/javascript">', post_content))))
شاید پیچیده به نظر بیاید اما اگر به دقت نگاه کنید میبینید که سه بخش در آن وجود دارد: محتوای نوشته، محل آغاز و طول آن. اینک که متن دقیق را برای حذف از نوشتههایمان در اختیار داریم، تنها کاری که باید بکنیم این است که به تابع REPLACE بگوییم که آن را با یک کاراکتر فاصله جایگزین کند. کافی است کد فوق را به دستور زیر کپی کنید:
UPDATE wp_posts SET post_content = replace(post_content, string_to_replace, replacement_string);
در این مرحله کد به صورت زیر در میآید:
UPDATE wp_posts SET post_content = REPLACE(post_content, substr(post_content, locate('<script type="text/javascript">', post_content), ((locate('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">', post_content) + 93) - (locate('<script type="text/javascript">', post_content)))), ' ');
با اجرای اسکریپت فوق اگر همه موارد به درستی وارد شده باشند، میبینید که نتیجه اجرای موفقیتآمیز دستور در phpMyAdmin نمایش مییابد
اینک وقتی نوشتهها ها را مجدداً در مرورگر وب بارگذاری کنیم، میبینیم که در همه نوشتهها تبلیغات به صورتی جادویی حذف شده است.
البته ممکن است برخی نوشتهها وجود داشته باشند که در آنها تبلیغات به یک روشی درج شده باشد که اندکی تفاوت داشته باشد. برای مثال به تصویر زیر توجه کنید:
اما با کمی دستکاری کد و تغییر دادن برخی تگهای آغاز و پایان و اجرای مجدد دستور SQL میتوانید آنها را نیز حذف کنید.
این تکنیک برای حذف هر نوع محتوایی از همه نوشتههای بلاگ قابل استفاده است. زیبایی درج نوشتهها در پایگاه داده به همین دلیل است. چون میتوان به سادگی با اجرای یک دستور SQL هزاران نوشته را به یک باره دستکاری کرد. بدین ترتیب کاری که به حجم بالایی از ویرایش دستی نیاز داشت، در کمترین زمان ممکن انجام میگیرد.
اگر این نوشته مورد توجه شما قرار گرفته است، پیشنهاد میکنیم موارد زیر را نیز مطالعه نمایید:
- مجموعه آموزش های راه اندازی سایت و کار با وردپرس
- آموزش پیکربندی Apache و راه اندازی وب سرور در لینوکس (LAMP)
- آموزش اس کیو ال در محیط phpMyAdmin
- راحی و برنامه نویسی وب
- راهاندازی و مدیریت سایت با وردپرس
- آموزش مهارتهای اساسی کامپیوتر
- گنجینه آموزش های وردپرس (WordPress)
- دستور Between در SQL – از کاربرد تا نحوه استفاده به زبان ساده
==