Một cách có thể để thực hiện sửa đổi dữ liệu này là sử dụng WP-CLI trên thiết bị đầu cuối.
Trước hết, bạn nên đảm bảo rằng bạn có một bản sao lưu và chiến lược khôi phục vững chắc trong trường hợp có bất cứ điều gì sai. Bạn cũng nên kiểm tra quy trình này trên hệ thống cục bộ hoặc thử nghiệm với một bản sao của cơ sở dữ liệu trực tiếp.
Các bước cơ bản là, lặp lại qua từng trang web trong mạng của bạn và thay thế các URL của từng trang web bằng search-replace
lệnh của WP-CLI .
Đây là một bash one-liner:
for SITE in $(wp site list --field=url); do wp search-replace "{$SITE}" "${SITE/http:/https:}" --dry-run --precise --network --verbose; done
Hãy xem xét rằng:
for SITE in $(wp site list --field=url);
Cái đó bắt đầu một vòng lặp cho mỗi dòng đầu ra của lệnh bên trong $()
và ghi từng dòng trong biến $SITE
.
$(wp site list --field=url)
Đó là WP-CLI site list
lệnh mang đến cho bạn một danh sách tất cả các URL trang web trong mạng của bạn. Chỉ chạy lệnh này, bạn có thể sẽ thấy một cái gì đó như:
http://your-site.tld/
http://your-site.tld/site2/
http://another-of.your-site.tld/
...
Hiện nay
...); do
sẽ chỉ bắt đầu phần vòng lặp bên trong.
Lệnh vòng lặp bên trong thực hiện tất cả các phép thuật (tôi chia nó thành hai dòng sử dụng \
để dễ đọc):
wp search-replace "$SITE" "${SITE/http:/https:}" \
--dry-run --precise --network --verbose
Chúng tôi nói với WP-CLI để tìm kiếm cho $SITE
(ví dụ https://your-site.tld/
) và thay thế nó bằng một phiên bản sửa đổi một chút: ${SITE/http:/https:}
. Đây là một chuỗi bash thay thế hoạt động thay thế http:
bằng https:
. (Vì vậy, giải quyết các biến, lệnh sẽ như thế nào wp search-replace "http://your-site.tdl/" "https://your-site.tld/"
).
search-replace
có nhiều tùy chọn có thể được mô tả trong tài liệu . Trong ví dụ tôi đã sử dụng:
--dry-run --precise --network --verbose
--dry-run
và --verbose
rõ ràng là hữu ích để kiểm tra lệnh.
--network
áp dụng hoạt động tìm kiếm và thay thế cũng cho các tab mạng.
--precise
nói với WP-CLI sử dụng PHP thay vì SQL để tìm kiếm và thay thế các giá trị. Điều đó đảm bảo các giá trị nối tiếp để không bị hỏng.
Cuối cùng, vòng lặp được đóng lại với
; done
Hãy để tôi nhấn mạnh một lần nữa: kiểm tra điều này sâu sắc trước khi bạn bắt đầu sử dụng điều này vào sản xuất. Bạn nên hiểu cách thức hoạt động của nó và những gì WP-CLI làm. Tôi đã sử dụng WP-CLI trước đây để thực hiện các thao tác như vậy và thay thế các hoạt động để di chuyển nhiều trang sang các tên miền khác, nhưng không chuyển từ http
sang https
.
Có thể có một số trường hợp cạnh: WP-CLI vẫn đọc wp-config.php
và cố gắng tìm một «mạng» phù hợp trong cơ sở dữ liệu bằng cách sử dụng các hằng số trong wp-config.php
. Nếu bạn đang thao túng một trang web (cơ sở dữ liệu) nhưng không phải trang web khác (các hằng số trong wp-config.php
), bạn có thể gặp rắc rối. Nhưng đối với trường hợp của bạn, tôi nghĩ đó sẽ không phải là vấn đề vì WP thường dựa vào DOMAIN_CURRENT_SITE
và PATH_CURRENT_SITE
dù sao họ cũng sẽ không thay đổi. Nhưng một lần nữa, kiểm tra kỹ lưỡng này.
Với phép thuật bash nhiều hơn một chút, bạn cũng có thể chia vòng lặp này thành nhiều phần của 5 hoặc 10 trang web và từng bước đi qua nó.