単純な検索と置換を行うSQLクエリ


19

新しいWebサイトを作成するたびに、まず「stage.domain-name.com」のようなサブドメインにステージングサイトを作成します。

すべてが正常に動作した後、データベースをエクスポートし、notepad ++で開き、「subdomain.domain-name.com」の検索/置換を実行して、「domain-name.com」に置き換えます...最後に新しいデータベースにインポートしますライブサイトのデータベース。

私の質問は... phpmyadminを使用してデータベース全体でこの単純な検索/置換を実行したい場合、どのSQLクエリを実行する必要がありますか?

-CH


クエリに慣れていない場合は、検索と置換プラグイン、wordpress.org
extend / plugins / search

WordPress機能を使用してURLを更新してみませんか? codex.wordpress.org/Moving_WordPressはすべてを詳しく説明します
アレックスOlder 14年

これにはプラグインがあります。あなたがしたい場合は、バックエンドの快適な使用を可能にし、またポストコンテンツや他のいくつかの分野にURLを置き換えます。wordpress.org/plugins/better-search-replace
simonthesorcerer

回答:


13

URLが保存されるテーブルはwp_optionsです。サイトのURLを使用する列を更新する必要があります。

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"

いくつかの値が欠落している可能性がありますが、この検索/置換プロセスを再度実行するたびに、更新する必要がある値とテーブルを確認して、このスクリプトに追加できます。

WordPress Codexには、サイトのURLを変更する方法に関する優れたガイドがあります。サイトURLの変更


1
データベース全体で検索/置換を行う方法はありませんか?つまり、たとえば、メディアライブラリを含むさまざまな場所のURLを置き換える必要があることに気づきました。...データベース全体を本質的にすべてのフィールドで検索/置換した場合、これは解決します。問題。ご協力ありがとうございます
-NetConstructor.com

答えに追加した新しいリンクを確認してください。それが道だと思います。
フェルナンドブリアーノ

1
これは、シリアル化されたデータでは機能しません。一部のテーマ設定が完全​​に壊れる可能性があります。
クリスチャンレスキュー

28

オプション、投稿、投稿コンテンツ、投稿メタを行うのに最適:

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

phpMyAdminとMySQLを使用したデータの検索もご覧くださいPackt Publishing。そして、検索正規表現を検索し、すべての記事やページをGrepのと交換することができるようにする良いWPプラグインです。

Update 6/16/2015:次の文にリンクされているツールを使用する方がはるかに優れています。データベースダンプで上記のような単純な検索/置換を行うと、シリアル化されたデータが破損するためです。interconnectit.comのWordPressシリアル化PHP検索置換ツールを参照してくださいこのように、相互接続スクリプトはあらゆる場所でURLを変更するため、シリアル化されたデータを破損せず、投稿コンテンツでRegExを実行する必要がありません。私は常にこのツールを使用してサイトを別のドメインに移行するか、httpからhttpsへのグローバルな変更を行ってプラグインなしでSSLを強制し、コンテンツ内のすべてのURLを変更して安全でない要素エラーを防ぎます。


2
新しいドメインに移動する場合でも、GUIDを変更しないでください。投稿が新しいデータベースにエクスポート/インポートされる場合、IDが変更される可能性があるため、投稿を一意に識別するために使用されます。一つには、RSSリーダーはGUIDを使用して、特定の記事が読まれたかどうかを判断します。guidを変更すると、すべての記事が効果的に再公開されます。
テイラーデューイ

@taylordeweyは次のように述べています。「ガイドを変更しないでください...」Rubbish。
-markratledge

1
@songdogtech なぜそれがゴミなのかを説明するには?
シア

1
GUIDを変更する必要があるのなぜですか?
カイザー

1
これは、シリアル化されたデータでは機能しません。一部のテーマ設定が完全​​に壊れる可能性があります。実際、インターコネクト/ ITなどのツールを使用します。
クリスチャンレスキュー

9

これは私が使用する優れたドロップインスクリプトであり、WPがオプションを保存するために使用するシリアル化された配列で美しく機能します。それが巨大なセキュリティリスクであるため、完了したらリモートサーバーから削除するようにしてください。

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


2
私が-1になった理由がわかりません。このスクリプトは、SQLステートメントよりも優れています。フィードバックをお願いします
-lancemonotone

1
SQLを使用することができます知らない人、そのツールは、SQLで書く人に動揺される
ジョン

4

このためにWP-CLIを使用します。最も簡単であり、シリアル化されたデータを処理するためです。

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

実際のデータベースを操作する代わりに、変更をSQLファイルに書き込むオプションもあります。

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


断然最も堅牢で最速のソリューションです。wp-cliは1日をもう一度保存します
ryanrain

3

これを行う必要はありません。相対パスを使用できます。

subdomain.soemthing.com/image.jpgの代わりに何かをリンクする場合-たとえば/image.jpgを使用します

このように、そもそも問題に直面することはありません。

それ以外の場合は、mysql updateステートメントに使用できます

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

ありがとう...ええ、私は次回それをします。SQLステートメントは、データベース全体(すべてのテーブルを含む)で検索置換を行いますか?
NetConstructor.com

@ NetConstructor.com上記のmireilleのSQLステートメントは、特定のテーブルの特定のフィールドの文字列を置き換えるための一般的なMySQLコマンドです。記述されたとおりにこのステートメントを実行しようとした場合、機能しません。このコマンドを機能させるには、TABLE_NAMEとFIELD_NAMEをWordPressが使用する実際のフィールドとテーブルに変更する必要があります。
マンザバー

また、相対パスを使用したい場合でも、wordpressの多くの部分が完全なパスを自動挿入する傾向があることに注意してください。本当にこの作業プラグインなどを取得するには、次のwordpress.org/plugins/root-relative-urls非常に、非常に便利です
benz001

2

必要なワードプレスドメインを変更するには、localhostからサイトをライブにすることがあります。これは更新クエリの完全なリストです。

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');
  • 必要に応じて、WPでデフォルトではない他のテーブルも追加する必要があります。

更新: Search Replace DBバージョン3.1.0は、開発者にとって使いやすいフロントエンドツールであり、PHPのシリアル化された文字列またはオブジェクトを損傷しない、データベース全体の検索/置換アクションを実行できます。


2
これは、シリアル化されたデータでは機能しません。テーマの構成が完全に壊れる可能性があります。
クリスチャンレスキュー

-1

実際、テーマのwp_configファイルとfunctions.phpファイルの調整だけでSQLクエリを使用する必要はありません。Wordpress Codexでこのトピックをチェックしてください:https : //codex.wordpress.org/Changing_The_Site_URL


1
これは正しくありません。残念ながら、WordPressは一部のURLをテキストとしてデータベースに保存します。
s_ha_dum
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.