דילוג לתוכן
כלים

SQL לחיפוש והחלפה

שנו את כתובת האתר שלכם בלי לפגום בנתונים מסוג serialized

רץ בדפדפן שלכם. שום דבר לא מועלה.

השינוי

קראו את זה לפני שאתם מריצים משהו

WordPress שומר אפשרויות רבות כמחרוזות PHP-serialized, ומחרוזת מסודרת (serialized) רושמת בתוכה את אורך הבתים של עצמה — s:19:"http://old-site.com". החלפת SQL רגילה משנה את הטקסט אך לא את האורך, ולכן PHP כבר אינו מסוגל לבצע unserialize לשורה. אין שגיאה. הערך פשוט הופך לריק בשקט.

מה שאתם מאבדים: הגדרות וידג'טים, שינויי ערכת עיצוב, ורוב הגדרות התוספים. בדרך כלל לא שמים לב עד כעבור כמה ימים, ואז גם הגיבוי שהייתם משחזרים ממנו כבר איננו.

זו הסיבה שהשאילתות שלמטה נמנעות במכוון מלגעת ב-wp_options.

מה אתם מעבירים?
search-replace.sql

קודם כול גבו את מסד הנתונים. לא "שקלו לגבות" — פשוט גבו. ל-UPDATE אין ביטול.

אודות SQL לחיפוש והחלפה

חיפוש-והחלפה נאיבי ב-SQL על מסד נתונים של WordPress שובר כל אפשרות serialized שהוא נוגע בה, כי אורך המחרוזת השמור כבר לא תואם. הכלי מייצר את השאילתות הבטוחות, ומסביר בדיוק אילו מהן לא.

שאלות נפוצות

שאלות

האם אפשר לשנות את כתובת האתר בוורדפרס עם חיפוש והחלפה ב-SQL?

לא בבטחה, וזו העצה הגרועה הכי משותפת בעולם הוורדפרס. הרבה אפשרויות נשמרות כמחרוזות serialized של PHP שמתעדות את אורך הבתים של עצמן. החלפת SQL רגילה משנה את הטקסט אבל לא את האורך, אז PHP נכשל בשקט לבטל את הסריאליזציה של השורה והערך פשוט נעלם — לוקח איתו הגדרות וידג'טים, שינויי תבנית והגדרות תוספים.

במה כדאי להשתמש במקום?

WP-CLI: 'wp search-replace old new --all-tables --dry-run' קודם, ואז בלי --dry-run. הוא מבין סריאליזציה וכותב מחדש את קידומות האורך נכון. אם אין לכם גישה ל-CLI, התוסף Better Search Replace עושה את אותו הדבר מתוך הניהול.

האם כדאי לעדכן את עמודת ה-GUID?

לא. ה-GUID הוא מזהה ייחודי קבוע לפוסט, לא קישור, וקוראי פידים מזהים לפיו. כתיבתו מחדש גורמת לכל מנוי לראות כל פוסט ישן כחדש לגמרי. התיעוד של וורדפרס אומר במפורש לא לשנות אותו.