Truy vấn SQL nào để tìm và thay thế đơn giản


19

Bất cứ khi nào tôi tạo một trang web mới, trước tiên tôi tạo một trang web dàn dựng trên một tên miền phụ như "stage.domain-name.com".

Sau khi mọi thứ hoạt động chính xác, tôi xuất cơ sở dữ liệu, mở nó trong notepad ++ và thực hiện tìm / thay thế cho "subomain.domain-name.com" và thay thế nó bằng "domain-name.com" ... cuối cùng tôi nhập nó vào một cái mới cơ sở dữ liệu cho các trang web trực tiếp.

Câu hỏi của tôi là ... tôi cần chạy truy vấn SQL nào nếu tôi chỉ muốn thực hiện tìm / thay thế đơn giản này trên toàn bộ cơ sở dữ liệu bằng phpmyadmin?

-CH


Nếu bạn không quen với các truy vấn, hãy thử plugin Tìm kiếm và Thay thế, wordpress.org/extend/plugins/search-and-replace
t31os

Tại sao không sử dụng chức năng WordPress để cập nhật URL? codex.wordpress.org/Moving_WordPress chi tiết mọi thứ
Alex Cũ hơn

Có một plugin cho việc này. Nó cho phép sử dụng thoải mái phần phụ trợ và cũng thay thế URL trong nội dung bài đăng và một số trường khác, nếu bạn muốn: wordpress.org/plugins/better-search-replace
simonthesorcerer

Câu trả lời:


13

Bảng nơi URL của bạn được lưu là wp_options. Bạn nên thực hiện cập nhật trên các cột sử dụng URL cho trang web của mình:

UPDATE TABLE wp_options SET option_value = "new domain" WHERE option_name = "siteurl"
UPDATE TABLE wp_options SET option_value = "new domain" WHERE option_name = "home"

Tôi có thể thiếu một số giá trị, nhưng bất cứ khi nào bạn thực hiện quá trình tìm / thay thế này một lần nữa, bạn có thể nhận thấy các giá trị và bảng cần được cập nhật và thêm chúng vào tập lệnh này.

WordPress Codex có một hướng dẫn tuyệt vời về cách thay đổi URL trang web, có thể điều đó thậm chí còn tiện lợi hơn cho bạn: Thay đổi URL trang web


1
không có cách nào để tìm / thay thế trên toàn bộ cơ sở dữ liệu? Nói cách khác ... tôi nhận thấy ví dụ rằng tôi cần thay thế các URL ở một loạt các vị trí khác nhau bao gồm thư viện phương tiện .... Nếu có một tìm / thay thế cho toàn bộ cơ sở dữ liệu về cơ bản cho mọi trường thì điều này sẽ giải quyết vấn đề. Cảm ơn sự giúp đỡ của bạn
NetConstructor.com

Kiểm tra liên kết mới mà tôi đã thêm vào câu trả lời. Tôi nghĩ rằng đó sẽ là con đường để đi.
Fernando Briano

1
Điều này sẽ không làm việc cho dữ liệu nối tiếp. Nó có thể phá vỡ hoàn toàn một số cấu hình chủ đề.
Christian Lescuyer

28

Tốt nhất để làm tùy chọn, bài viết, đăng nội dung và đăng meta:

UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');

UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');

UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');

Đồng thời xem Tìm kiếm dữ liệu bằng phpMyAdmin và MySQL | Xuất bản Packt. Search RegEx là một plugin WP tốt để có thể tìm kiếm và thay thế bằng Grep thông qua tất cả các bài đăng và trang.

Cập nhật ngày 16 tháng 6 năm 2015: Sử dụng công cụ được liên kết trong câu tiếp theo sẽ tốt hơn nhiều, vì một tìm kiếm / thay thế đơn giản như trên trong kết xuất cơ sở dữ liệu sẽ phá vỡ dữ liệu tuần tự. Xem interconnectit.com Công cụ Thay thế Tìm kiếm PHP được Nối tiếp của WordPress. Bằng cách này, bạn không phá vỡ dữ liệu được tuần tự hóa và sẽ không cần chạy RegEx trên nội dung bài đăng, vì tập lệnh kết nối thay đổi URL ở mọi nơi. Tôi sử dụng công cụ đó mọi lúc để di chuyển các trang web sang các tên miền khác nhau hoặc chỉ đơn giản là thực hiện thay đổi toàn cầu từ http sang https để buộc SSL không có plugin và thay đổi tất cả các URL trong nội dung để tránh lỗi phần tử không an toàn.


2
Đừng bao giờ thay đổi hướng dẫn - ngay cả khi đi đến một tên miền mới. Nó được sử dụng để ID duy nhất bài đăng vì ID có thể thay đổi nếu bài đăng đang được xuất / nhập vào cơ sở dữ liệu mới. Đối với một điều, người đọc RSS sẽ sử dụng GUID để biết nếu một bài viết cụ thể đã được đọc hay chưa. Thay đổi hướng dẫn sẽ tái xuất hiệu quả tất cả các bài viết của bạn.
Taylor Dewey

@taylordewey nói: "Đừng bao giờ thay đổi hướng dẫn ..." Rác.
markratledge

1
@songdogtech Chăm sóc để giải thích tại sao lại là rác?
shea

1
Tại sao người ta phải thay đổi GUID?
kaiser

1
Điều này sẽ không làm việc cho dữ liệu nối tiếp. Nó có thể phá vỡ hoàn toàn một số cấu hình chủ đề. Thật vậy, sử dụng một công cụ như Interconnect / IT.
Christian Lescuyer

9

Đây là một tập lệnh thả xuống tuyệt vời mà tôi sử dụng và nó hoạt động rất đẹp với các mảng được tuần tự hóa mà WP sử dụng để lưu trữ các tùy chọn. Chỉ cần đảm bảo xóa nó khỏi máy chủ từ xa của bạn khi bạn hoàn thành vì đó là một rủi ro bảo mật LỚN.

https://interconnectit.com/products/search-and-replace-for-wordpress-database/


2
Tôi không biết tại sao tôi lại -1. Kịch bản này tốt hơn nhiều so với câu lệnh SQL. Xin vui lòng phản hồi?
lancemonotone

1
một công cụ mà những người không biết sql có thể sử dụng, đang làm phiền những người viết bằng sql
Jon

4

Đối với điều này, tôi sử dụng WP-CLI vì tôi thấy nó dễ nhất và nó chăm sóc dữ liệu nối tiếp.

wp search-replace 'http://example.dev' 'http://example.com' --skip-columns=guid

Ngoài ra còn có một tùy chọn ghi các thay đổi của bạn vào tệp SQL thay vì thao tác cơ sở dữ liệu thực tế:

wp search-replace foo bar --export=database.sql


cho đến nay các giải pháp mạnh mẽ nhất và nhanh nhất. wp-cli tiết kiệm một lần nữa
ryanrain

3

bạn không phải làm điều này, bạn có thể sử dụng các đường dẫn tương đối.

khi bạn đang liên kết một cái gì đó thay vì tên miền phụ.soemthing.com/image.jpg - sử dụng /image.jpg chẳng hạn

như thế này bạn sẽ không phải đối mặt với vấn đề ngay từ đầu.

mặt khác, đối với câu lệnh cập nhật mysql bạn có thể sử dụng

update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, find this string’, replace found string with this string’);

Cảm ơn ... vâng tôi sẽ làm điều đó vào lần tới. Câu lệnh SQL không tìm thấy sự thay thế trên toàn bộ cơ sở dữ liệu (bao gồm tất cả các bảng)?
NetConstructor.com

@ NetConstructor.com Mireille câu lệnh SQL đã cung cấp cho bạn ở trên là lệnh MySQL chung để thay thế một chuỗi trong một trường cụ thể trong một bảng cụ thể. Nếu bạn đã thử chạy câu lệnh này chính xác như nó đã được viết, nó sẽ không hoạt động. Để lệnh này hoạt động, bạn cần thay đổi TABLE_NAME & FIELD_NAME thành trường và bảng thực được WordPress sử dụng.
Manzabar

Cũng lưu ý rằng ngay cả khi bạn muốn sử dụng các đường dẫn tương đối, rất nhiều phần của wordpress có xu hướng tự động chèn các đường dẫn đầy đủ. Để thực sự làm việc này, một plugin như: wordpress.org/plugins/root-relative-urls là rất, rất hữu ích
benz001

2

Để thay đổi tên miền wordpress mà chúng ta thường cần, có thể làm cho trang web trực tiếp từ localhost: Đây là danh sách đầy đủ các truy vấn cập nhật:

UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');
UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_url = replace(link_url, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_image = replace(link_image, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_usermeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');

/*UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl' OR option_name = 'widget_text' OR option_name = 'dashboard_widget_options';*/
UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com');
  • Chúng tôi cũng phải thêm các bảng khác không mặc định với WP nếu cần.

CẬP NHẬT: Tìm kiếm Thay thế DB phiên bản 3.1.0 là một công cụ giao diện người dùng thân thiện với người dùng dành cho nhà phát triển, cho phép bạn thực hiện các hành động tìm kiếm / thay thế trên cơ sở dữ liệu, không làm hỏng các chuỗi hoặc đối tượng được xê-ri hóa PHP.


2
Điều này sẽ không làm việc cho dữ liệu nối tiếp. Nó có thể phá vỡ hoàn toàn cấu hình chủ đề.
Christian Lescuyer

-1

Trên thực tế, bạn không phải sử dụng truy vấn SQL chỉ một số điều chỉnh trong tệp wp_config và tệp.php trong chủ đề của mình. Kiểm tra chủ đề này trong Codpress Wordpress: https://codex.wordpress.org/Changing_The_Site_URL


1
Điều này không đúng. WordPress không may lưu trữ một số URL trong cơ sở dữ liệu dưới dạng văn bản.
s_ha_dum
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.