WordPress

WordPress 関連情報

サブドメイン形式のマルチサイト提供時にログインが出来ない場合

必要な設定

define('COOKIE_DOMAIN', $_SERVER['HTTP_HOST']);

設定しないと、新サイトの管理画面へログインしようとしても、認証成功後に改めてログイン画面に戻されてしまい管理画面へ進めない。 理由は、 Set-Cookie 時の適用対象ドメインがメインサイトになっているから。

前提(例)

  • WordPress マルチサイトのメインとなるドメインが example.com であるとする
  • マルチサイトへ新たに追加したサイトのドメインが news.example.jp であるとする

COOKIE_DOMAIN の設定前

set-cookie: wordpress_test_cookie=WP%20Cookie%20check; path=/; domain=.example.com; secure

COOKIE_DOMAIN の設定後

set-cookie: wordpress_test_cookie=WP%20Cookie%20check; path=/; domain=news.example.jp; secure

WordPress マルチインスタンス時のユーザーログイン

  • Kubenetes に複数Podを配置したいケース
  • オフィシャルの Doker イメージを利用している場合は以下のキーが自動生成されるので、インスタンス間で差が生じてしまうとログイン処理が継続できなくなる。その場合は意図的に何らかの値を設定しておく必要あり。
AUTH_KEY
SECURE_AUTH_KEY
LOGGED_IN_KEY
NONCE_KEY
AUTH_SALT
SECURE_AUTH_SALT
LOGGED_IN_SALT
NONCE_SALT

Nginx setting

Nginx 向けの設定例(WP-Supercacheなどを含む)が記載されているページ

Nginx – Advanced Administration Handbook | Developer.WordPress.org

Nginx – Advanced Administration Handbook | Developer.WordPress.org

While the LAMP stack (Linux + Apache + MySQL + PHP) is very popular for powering WordPress, it is also possible to use Nginx. WordPress…

By default, on a Multisite setup, a static file request brings php into picture i.e. ms-files.php file. You can get much better performance using Nginx Map{..} directive.

In Nginx config for your site, above server{..} block, add a section as follows:

map $http_host $blogid {
    default               0;
 
    example.com           1;
    site1.example.com     2;
    site1.com             2;
}

It is just a list of site-names and blog-ids. You can use  Nginx helper to get such a list of site-name/blog-id pairs. This plugin will also generate a map.conf file which you can directly include in the map{} section like this:

マルチサイト(サブドメイン形式)でドメインを変更したい場合

商用データをローカルに持ってきて開発環境を再構築する際に、ドメイン名のみを変更したくなるケース

変更対象 変更する値
データベース wp_options siteurl を https://new.example.com
データベース wp_options home を https://new.example.com
データベース wp_site domain を new.example.com
データベース wp_sitemeta siteurl を https://new.example.com/ (末尾スラッシュ)
データベース wp_blogs 対象サイトIDの domein を new.example.com
データベース wp_usermeta source_domain
wp-config.php DOMAIN_CURRENT_SITE new.example.com
  • URLを変更したのに、WPログインサイトへアクセスすると無限ループになるようなケースでは、ここの値の変更漏れを疑う
  • DBはどう見ても修正し終えているのに無限ループが直らない(あるいは、変更前サイトでのアクセスができてしまう)場合には、データベースキャッシュが悪さをしている可能性があるので確認する
    • 例えば Redis Object Cache のようなプラグインが邪魔をしていないかなど

コンテナ間をFQDNでアクセスする

services:
  front:
    image: nginx
    ports:
      - "443:443"
      - "80:80"
    volumes:
      - 
    networks:
      default:
        aliases:
          - dev.example.com
          - hello.example.jp

  wordpress:
    image: ...
  • WordPress コンテナAから、HTTPS終端している コンテナBに対して、FQDNでアクセスしたいケース
  • インターネット環境上であれば当然名前解決できるが、ローカル環境で名前解決なしで構成している場合
  • 発想は hosts に別コンテナのIPアドレスを記載するのと同程度でしかないのだが、コンテナの動的なIPアドレスを指定できないことが課題だった。aliasを設定することで、wordpressコンテナから https://deev.example.com にてアクセスできるようになる
  • WordPress マルチサイト構成時に、サイトネットワークをアップグレード操作するために必要になった通信要件

テンプレート階層

引用: Template Hierarchy | Theme Developer Handbook | WordPress Developer Resources


WordPress Plugin 開発の生産性を向上する便利な知識

WordPress プラグイン関連情報

Super Page Cache for Cloudflare (WordPress Plugin)

Super Page Cache プラグインを利用して WordPress コンテンツを Cloudflare にキャッシュする