tl;dr
WordPress を運用していて, 個人的な調べによると, 最もやらかすのは WordPress アドレスとサイトアドレスの設定をミスってしまい, せっかく頑張って構築した WordPress サイトにアクセス出来なることではないでしょうか. 多分にもれず, 私も何度となくやらかしました.
やらかすたんびにググっていたので, 実際のその解決方法をメモっておきます.
解決方法
解決方法は複数あるようですが, 一番, お手軽な解決方法は, wp-config.php をイジって定数 WP_HOME
と WP_SITEURL
を定義することだと思います.
define('WP_HOME','https://oreno-wordpress.com'); define('WP_SITEURL','https://oreno-wordpress.com'); /* That's all, stop editing! Happy blogging. */
wp-config.php の 90 行目くらいに書いておくと良さそうです.
サーバーにログインして, vim が入っていなければインストール, vim で wp-config.php を修正しましょう.
せっかくなので WordPress のソースコードを読んでみる
そもそも WP_HOME とか WP_SITEURL について
上記のドキュメントを参考にさせて頂きました.
定数 | 詳細 |
---|---|
WP_HOME | サイトアドレスを定義する. wp_options テーブル の home の値よりも優先される. WordPress をインストールした URL |
WP_SITEURL | WordPress アドレスを定義する. wp_options テーブルの siteurl の値よりも優先される. WordPress にクライアントユーザーがアクセスする URL |
定数の名前と定義の意味が逆のような気がして紛らわしいです...
ちなみに, wp_options テーブルのテーブル定義は以下の通りとなっていて, WordPress の稼働に必要なデータが格納されています.
mysql> DESC wp_options; +--------------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+---------------------+------+-----+---------+----------------+ | option_id | bigint(20) unsigned | NO | PRI | NULL | auto_increment | | option_name | varchar(191) | NO | UNI | | | | option_value | longtext | NO | | NULL | | | autoload | varchar(20) | NO | | yes | | +--------------+---------------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec)
さらに, 以下は手元の環境にて Docker で起動した WordPress の wp_options テーブルの中身の一部抜粋です.
mysql> SELECT option_name,option_value FROM wp_options WHERE option_name = 'home'; +-------------+-----------------------+ | option_name | option_value | +-------------+-----------------------+ | home | http://localhost:8080 | +-------------+-----------------------+ 1 row in set (0.00 sec) mysql> SELECT option_name,option_value FROM wp_options WHERE option_name = 'siteurl'; +-------------+-----------------------+ | option_name | option_value | +-------------+-----------------------+ | siteurl | http://localhost:8080 | +-------------+-----------------------+ 1 row in set (0.00 sec)
これらの値を定数 WP_HOME
とか WP_SITEURL
は上書きする挙動になっているということですな.
ソースコード
話題となっている WP_HOME
と WP_SITEURL
を呼んでいる関数はいくつかありますが, 以下のコードを読んでみたいと思います.
WP_HOME
と WP_SITEURL
は以下のように呼ばれています.
/** * Retrieve the WordPress home page URL. * * If the constant named 'WP_HOME' exists, then it will be used and returned * by the function. This can be used to counter the redirection on your local * development environment. * * @since 2.2.0 * @access private * * @see WP_HOME * * @param string $url URL for the home location. * @return string Homepage location. */ function _config_wp_home( $url = '' ) { if ( defined( 'WP_HOME' ) ) { return untrailingslashit( WP_HOME ); } return $url; } /** * Retrieve the WordPress site URL. * * If the constant named 'WP_SITEURL' is defined, then the value in that * constant will always be returned. This can be used for debugging a site * on your localhost while not having to change the database to your URL. * * @since 2.2.0 * @access private * * @see WP_SITEURL * * @param string $url URL to set the WordPress site location. * @return string The WordPress Site URL. */ function _config_wp_siteurl( $url = '' ) { if ( defined( 'WP_SITEURL' ) ) { return untrailingslashit( WP_SITEURL ); } return $url; }
それぞれ, _config_wp_home
と _config_wp_siteurl
という関数内で WP_HOME
や WP_SITEURL
が定義されているかどうかをチェックしていることがわかります. もし定義されている場合には, 定数の値を読み取って, ご丁寧に文字列の最後の /
を取り除いて値を返すように実装されていました.
以上
WordPress アドレス
とサイトアドレス
, WP_HOME
, WP_SITEURL
がうまく整理出来ていませんが, メモとさせて頂きます.