WordPress」カテゴリーアーカイブ

WordPress 引越し・移行したのでまとめ

※事前に必ずバックアップを取りましょう

環境
WordPress:5.0.3
PHP:7.1.3
OS:Win10 XAMPP
ツール:WinSCP,phpMyAdmin
DB:MySQL

ファイルのダウンロード

まずは現在WPが稼動しているサーバーから全ファイルをダウンロードします。
※特に注意点なし

データベースのエクスポート

WPが稼動しているデータベースからデータのエクスポート
公式ドキュメントより
「生成オプション」セクション
「DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT / TRIGGER コマンドを追加する」をチェックしてエクスポート

ファイルを移行先にアップロード

ファイルをアップロードしたら設定ファイルを編集して移行先のデータベース情報を設定してください。
wp-config.php

// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define('DB_NAME', 'database_name_here');

/** MySQL データベースのユーザー名 */
define('DB_USER', 'username_here');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'password_here');

/** MySQL のホスト名 */
define('DB_HOST', 'localhost');

/** データベースのテーブルを作成する際のデータベースの文字セット */
define('DB_CHARSET', 'utf8');

/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define('DB_COLLATE', '');

データベースのインポート

厄介なのでSQLで一括で編集

UPDATE wp_options SET option_value="https://localhost/blog" WHERE option_name="siteurl";
UPDATE wp_options SET option_value="https://localhost/blog" WHERE option_name="home";
UPDATE wp_posts SET post_content=REPLACE(post_content, "https://office-goto.info", "https://localhost/blog");

WordPress アドレス (URL)とサイトアドレス (URL)を移行先のURLに書き換えています。

記事内のデータに関してはリンクや画像などを追加するとき直で参照先を記載するWPの仕様なので記事内容のみ文字列を新しいURLに置換しています。
記事はwp_postsテーブルのpost_contentに格納されています。

ちなみにエクスポートしたsqlファイルを編集してURLを全て一括で置換してからインポートするやり方はウィジットが消えたりめちゃくちゃになったので辞めておいたほうが無難です。

.htaccessの修正

http、https、wwwあり・なしなどを統一したりしてる場合
ログインURLをプラグイン等で変更している場合などさまざまな場合がありますので自身の環境に合わせた修正が必要です。

例)ローカルのblogフォルダにWPを入れて検証する場合

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
# END WordPress

原因不明

外観->メニューのURLがどこで設定されているか分かっていないためメニューのURLだけWPの管理画面から編集した。
タグをどこかのファイルに書き出しているのかも?

WordPress ショートコードでPHPファイルをインクルード

ショートコードを使ってPHPファイルをインクルードする方法についてechoするPHPファイルを読み込みたいとき表示がずれたので公式ドキュメントを調べました。

公式より抜粋
echo ではなく return を使うようにしてください。
echo されたものはすべてブラウザへ出力されますが、ページの適切な箇所に表示されません。

ob_get_cleanをリターンすればいいとのことでさっそく作成

function my_shortcode() {
    ob_start();
    include('phpfile.php');
    return ob_get_clean();
}
add_shortcode('shortcode', 'my_shortcode');

phpfile.phpがecho するファイルでも【shortcode】で呼び出したとき正しく表示されるようになります。

WordPress 新しいエディタ 使いにくい Gutenberg

gutenberg

WordPressを更新したら新しいエディタになっていました。
Gutenbergと言うらしいのですが筆者はVim使いなのでテキストしか使わないのですよね。
画像の通り①、②と2回クリックしてテキストモードに切り替えるのが面倒でビジュアルエディタを前のバージョンに戻しました。

classiceditor

Classic Editorと言うプラグインを追加するだけで前のバージョンのエディタに変更できるので助かりました。

WordPress コメント 画像認証 セキリティ強化 SiteGuard WP Plugin

SiteGuard-WP-Plugin

SI CAPTCHA Anti-Spamで画像認証をしていたのですが配布終了とのことでSiteGuard WP Pluginに切り替えました。

設定できる項目は画像の通り。

ログインするURLが変わってしまうのでブックマークを再度登録し直しましょう。
ログインするURLは自分で決めれるのでログインURLが漏出することはありません。

ログインするたびにメールが着たりするのでログインアラートはOFFにしてあります。

コメントやログインの画像認証はひらがな/英数字/無効とどれかひとつ選択するだけです。

WordPress PHP7にバージョンアップしたらエラー

HTTP500エラー

久しぶりにWPのダッシュボードにログインしたらPHP5.6は危険とのことでPHP7.1にバージョンアップしたらHTTP 500エラーで真っ白になり予期せぬ時間をとられてしまったので解決方法をまとめておきます。

デバッグモードに切り替えてエラー内容を確認する

wp-config.php

/**
 * 開発者へ: WordPress デバッグモード
 *
 * この値を true にすると、開発中に注意 (notice) を表示します。
 * テーマおよびプラグインの開発者には、その開発環境においてこの WP_DEBUG を使用することを強く推奨します。
 */
define('WP_DEBUG', false); // trueに変更

Exec-PHPプラグインのエラーみたいです。
調べるとExec-PHPはもう使えないみたいでダウンロードもできません。
なのでとりあえずPHPのバージョンをPHP5.6に戻してダッシュボードにログインしExec-PHPを停止、削除を実行。

Exec-PHPを削除したことにより全ての記事内のPHPタグが仕様不可に!!

画像やURL等はドメインが変わっても動くようにSITE_URLと言う自分で定義した定数を使っていました。これがすべて使えなくなり、リンクは飛べなくなり画像は表示されない事態になりました。

更に調べてみるとショートコードを使うのが一般的との事でショートコードをJavaっぽく作成
functions.php

function getSiteURL() {
    return SITE_URL;
}
add_shortcode('SITE_URL', 'getSiteURL');

※SITE_URLはconst.phpという別ファイルを自分で作ってindex.phpでrequire_onceしています。SITE_URLの中身はhttps://office-goto.info/

これで記事内で[ SITE_URL]と記載するとPHP変数が使えます。
(SITE_URLの前に半角スペースを空けないとURLが展開されるため半角スペースを空けています。)
ただ記事数が多いものでデータベースをエクスポートして一括でPHPタグを[ SITE_URL]に書き換えてインポートし直しました。

PHP7.1にバージョンアップし動作確認後特に問題なく画像やリンクが機能しているため問題解決。