Apa SQL Query untuk melakukan pencarian dan penggantian sederhana

20

Setiap kali saya membuat situs web baru saya pertama kali membuat situs pementasan pada subdomain seperti "stage.domain-name.com".

Setelah semuanya berfungsi dengan benar saya mengekspor database, buka di notepad ++ dan cari / ganti untuk "subdomain.domain-name.com" dan ganti dengan "domain-name.com" ... akhirnya saya impor ke yang baru database untuk situs langsung.

Pertanyaan saya adalah ... permintaan SQL apa yang harus saya jalankan jika saya hanya ingin melakukan pencarian / penggantian sederhana ini pada seluruh basis data menggunakan phpmyadmin?

-CH

NetConstructor.com
sumber
Jika Anda tidak terbiasa dengan pertanyaan, cobalah plugin Search and Replace, wordpress.org/extend/plugins/search-and-replace
t31os
Mengapa tidak menggunakan fungsionalitas WordPress untuk memperbarui URL? codex.wordpress.org/Moving_WordPress merinci segalanya
Alex Older
Ada plugin untuk ini. Ini memungkinkan penggunaan backend yang nyaman dan juga menggantikan URL di post-konten dan beberapa bidang lainnya, jika Anda ingin: wordpress.org/plugins/better-search-replace
simonthesorcerer

Jawaban:

13

Tabel tempat URL Anda disimpan adalah wp_options. Anda harus melakukan pembaruan pada kolom yang menggunakan URL untuk situs Anda:

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"

Saya mungkin kehilangan beberapa nilai, tetapi setiap kali Anda melakukan proses menemukan / mengganti ini lagi, Anda dapat melihat nilai dan tabel yang harus diperbarui dan menambahkannya ke skrip ini.

WordPress Codex memiliki panduan bagus tentang cara mengubah URL situs, mungkin itu lebih mudah bagi Anda: Mengubah URL Situs

Fernando Briano
sumber
1
Apakah tidak ada cara untuk menemukan / mengganti seluruh database? Dengan kata lain ... Saya perhatikan misalnya bahwa saya perlu mengganti URL di banyak lokasi yang berbeda termasuk perpustakaan media .... Jika ada menemukan / mengganti seluruh database pada dasarnya untuk setiap bidang maka ini akan menyelesaikan masalah. Terima kasih atas bantuan Anda
NetConstructor.com
Lihat tautan baru yang saya tambahkan pada jawabannya. Saya pikir itu akan menjadi cara untuk pergi.
Fernando Briano
1
Ini tidak akan berfungsi untuk data serial. Ini mungkin benar-benar merusak beberapa konfigurasi tema.
Christian Lescuyer
29

Opsi, posting, konten posting, dan meta posting terbaik:

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');

Lihat juga Mencari Data menggunakan phpMyAdmin dan MySQL | Penerbitan Paket. Dan Search RegEx adalah plugin WP yang bagus untuk dapat mencari dan mengganti dengan Grep melalui semua posting dan halaman.

Pembaruan 6/16/2015: Menggunakan alat yang ditautkan dalam kalimat berikutnya jauh lebih baik, karena pencarian / penggantian sederhana seperti di atas dalam database dump akan memecah data serial. Lihat interconnectit.com WordPress, Ganti Alat Penelusuran PHP. Dengan cara ini, Anda tidak merusak data serial dan tidak perlu menjalankan RegEx pada konten posting, karena skrip interkoneksi mengubah URL di mana-mana. Saya menggunakan alat itu setiap saat untuk memigrasi situs ke domain yang berbeda, atau hanya melakukan perubahan global dari http ke https untuk memaksa SSL tanpa plugin dan mengubah semua URL dalam konten untuk mencegah kesalahan elemen tidak aman.

markratledge
sumber
2
Jangan pernah mengubah panduan - bahkan jika pergi ke domain baru. Ini digunakan untuk secara unik mengidentifikasi posting karena ID dapat berubah jika posting diekspor / diimpor ke database baru. Untuk satu hal, pembaca RSS akan menggunakan GUID untuk mengetahui apakah artikel tertentu telah dibaca atau tidak. Mengubah panduan akan mempublikasikan ulang semua artikel Anda secara efektif.
Taylor Dewey
@taylordewey berkata: "Jangan pernah mengubah panduan ..." Sampah.
markratledge
1
@songdogtech Peduli untuk menjelaskan mengapa itu sampah?
shea
1
Mengapa seseorang harus mengubah GUID?
kaiser
1
Ini tidak akan berfungsi untuk data serial. Ini mungkin benar-benar merusak beberapa konfigurasi tema. Memang menggunakan alat seperti Interconnect / IT's.
Christian Lescuyer
9

Ini adalah skrip drop-in yang bagus yang saya gunakan dan berfungsi dengan baik dengan array serial yang digunakan WP untuk menyimpan opsi. Pastikan untuk menghapusnya dari server jauh Anda setelah selesai karena ini merupakan risiko keamanan BESAR.

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

lancemonotone
sumber
2
Saya tidak tahu mengapa saya -1. Script ini jauh lebih baik daripada pernyataan SQL. Tolong, umpan balik?
lancemonotone
1
sebuah alat yang dapat digunakan orang yang tidak tahu sql, mengecewakan mereka yang menulis dalam sql
Jon
4

Untuk ini saya menggunakan WP-CLI karena saya merasa paling mudah dan menangani data serial.

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

Ada juga opsi yang menulis perubahan Anda ke file SQL alih-alih memanipulasi database aktual:

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

Jan Beck
sumber
sejauh ini solusi yang paling kuat dan tercepat. wp-cli menyelamatkan hari itu sekali lagi
ryanrain
3

Anda tidak harus melakukan ini, Anda dapat menggunakan jalur relatif.

ketika Anda menautkan sesuatu alih-alih subdomain.soemthing.com/image.jpg - gunakan /image.jpg misalnya

seperti ini Anda tidak akan menghadapi masalah sejak awal.

jika tidak, untuk pernyataan pembaruan mysql dapat Anda gunakan

update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, find this string’, replace found string with this string’);
mireille raad
sumber
Terima kasih ... ya saya akan melakukannya lain kali. Pernyataan SQL melakukan penggantian temuan pada seluruh database (termasuk semua tabel)?
NetConstructor.com
@ NetConstructor.com Pernyataan SQL mireille memberi Anda di atas adalah perintah MySQL generik untuk mengganti string dalam bidang tertentu dalam tabel tertentu. Jika Anda mencoba menjalankan pernyataan ini persis seperti yang ditulis, itu tidak akan berhasil. Agar perintah ini berfungsi, Anda harus mengubah TABLE_NAME & FIELD_NAME menjadi bidang dan tabel nyata yang digunakan oleh WordPress.
Manzabar
Perhatikan juga bahwa bahkan jika Anda ingin menggunakan jalur relatif, banyak bagian wordpress cenderung otomatis memasukkan jalur lengkap. Untuk benar-benar menjalankan plugin ini seperti: wordpress.org/plugins/root-relative-urls sangat, sangat membantu
benz001
2

Untuk mengubah domain wordpress yang sering kita butuhkan, mungkin membuat situs langsung dari localhost: Ini adalah daftar permintaan pembaruan yang lengkap:

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');
  • Kami juga harus menambahkan tabel lain yang tidak default dengan WP jika perlu.

UPDATE: Search Replace DB versi 3.1.0 adalah alat yang ramah pengguna, front-end untuk pengembang, yang memungkinkan Anda untuk melakukan pencarian / tindakan database yang luas, yang tidak merusak string atau objek serial PHP.

Reza Mamun
sumber
2
Ini tidak akan berfungsi untuk data serial. Ini mungkin benar-benar merusak konfigurasi tema.
Christian Lescuyer
-1

Sebenarnya, Anda tidak harus menggunakan kueri SQL hanya beberapa penyesuaian dalam file wp_config dan functions.php di tema Anda. Lihat topik ini di Wordpress Codex: https://codex.wordpress.org/Changing_The_Site_URL

MEDZ
sumber
1
Ini tidak benar. Sayangnya WordPress menyimpan beberapa URL dalam database sebagai teks.
s_ha_dum