既存のWPブログをWordPress.comに移行しようとしてぶつかった4つの制約

仕事、趣味あわせて複数のブログをインストール型WordPress (.org) で作っているけれども、アップデートやらスパム対策やらが面倒だから、クラウドサービスのWordPress.comに移行してメンテフリーにしたいなと思った。
また、素人でもサービスを使ってサイトが作れるこの時代に、お客さんからの相談に対する一つの回答として、WordPress.comという選択肢をお勧めできるかどうかについても、調べたいと思った。

それで、以前アカウントを作っていたWordPress.comを開いて、今やっている趣味ブログの1つをインポートして試してみたのだが・・・

結論から言うと、素直には移行できないことがわかった。(移行できるケースもある)

いくつか制約を発見してしまったので、それを書いておきたいと思う。ただし、まだ移行実施前なので、実際にやってみたらさらに何かあるかもしれない。

(1) パーマリンクが変更できない

記事のURL(パーマリンク)がこのようになっている。
https://xxxxxxxx/2017/12/09/記事タイトル/
年月日とタイトルがURLに含まれているが、これを変更することができない。

なので、既存のブログを連番にしていたり、カテゴリ名を含めている場合などは、リダイレクトが必要になる。
移行前に、元のサイトでパーマリンクの設定を上記のような形(日付と投稿名)に変更して、.htaccessなりmeta記述などでリダイレクトを設定し、しばらく時期を置いて検索エンジンのインデックスが落ち着いてから、ドメインの接続を切り替える必要があるだろう。
それで、記事を投稿するときは、必ずスラッグを書く必要がある。(日本語URLでいい人は何もしなくていい)

しかしよくよく考えてみると、記事IDによる連番でURLを管理していると、どこに持っていくにしても、自動採番のままで完全に同じ番号を生成することはできないから、どっちみち、番号をスラッグとして保存する必要があったりするので、上記のような仕様は、逆に言うと親切なのかもしれないね。

(2) プラグインが使えない(ビジネスプラン以外)

早速あれっ?と思ったのは、僕の場合、カテゴリ名の表示順を変更するプラグインを入れているのだが、WordPress.comのビジネスプラン以外ではプラグインを入れることができないので、それが使えない。よってカテゴリ順を任意に変更することができない。
WordPress.comにはJetpackという多機能プラグインが標準で入っているが、移行前のブログでそれ以外の付加機能をプラグインで入れている場合は、その機能は使えないことになる。(ただしビジネスプランでは使えそう)僕はJetpackは使っていないので、どんなことが出来るか詳しくはまだ分からないが。

(3) CSSが触れない。フォントが自由に設定できない(無料/パーソナルプラン)

もちろん、従来ブログのテーマを持っていくことはできないから(ビジネスプランは出来るのかな?)用意されている無料・有料テーマから好きなのを選んで使うことになるのだが、部分的にここ、もうちょっとこうしたい、と思った時にCSSがいじれないので出来ない。
またフォントも欧文ならいくつか選択できるが、日本語だと Noto Sans , Noto Serif ぐらいしか選べない(?)のでそこは我慢するしかない。
ブログタイトルや記事タイトルなどは、海外テーマの初期設定は馬鹿デカイのだが、「小」とか「最小」とかに変更はできるから、なんとか許容できるレベルかなと。微調整は出来ない。

(4) ビジネスプランが高い

現在のプランはこちらに書いてある。
https://ja.wordpress.com/pricing/

WordPress.com プラン

本日時点でビジネスプランは 2,983円/月なのだが、パッと見、ふーん、という感じなのだが、1年では36,000円近くになる。僕は高いなーと思う。
普通に共用サーバー借りてもせいぜい1,000円/月前後、僕はアドビのCCでも単体サブスクリプション2つで2,000円ぐらいしか払っていない。
ただし、サーバー持ってメンテして、、とかいう手間を考えると妥当と言えなくもないかな。見方によるね。
一応、プラグイン使えてテーマもアップできるらしいけど、それがどのレベルのものなのかは未体験だから分からない。探しても情報はあまり出てこなかった。

だいたい、上記4つが僕としては気になったところだけど、クラウドサービスとしてはよく考えられたシンプルな仕様だなと改めて思った。

<妥当なプラン>

プラン表にも書いてあるが、フリーランスや小規模事業者ならば、CSSが触れて広告が貼れる「プレミアム」が妥当なレベルだろうと思う。

その他、ちょっと感じたこと。

・インポートに時間がかかる

30ぐらいしか記事が入っていない既存ブログをインポートするとき、15分かかると表示されてしばらくインポート中のままになった。画像は勝手に登録されるので便利だけど、違う画像が間違えて登録された記事もあった。
記事が多いブログをインポートすると、かなり待たないといけないのではないかと思った。進捗がよく分からないので少し不安になる。

・画面に雪を降らせる機能「ホリデーの雪」がなぜか「設定」の中にある

ほとんど余談だけど、これが面白かった。なんか特別な意味でもあるのだろうか?

・管理画面は新しいユーザーインターフェースに

.orgと違ってスッキリと爽やかなUIになっていて好感は持てる。
ただ、全部の設定がそこで出来ない(?)ので従来の画面も見ながら設定などは行っている。

 

・・・というわけで、僕としては趣味のブログを頑張って(笑)移行しようと考えている。事前のリダイレクトとか、手間はかかってしまうけど。
ほんとは、仕事用含めて発信用としてはサーバーをやめちゃって、WordPress.comに一本化したいなとまで考えていたのだけど、それはやや無謀であることがわかった。
プランはとりあえず「パーソナル」でいいかな。1つ移行してみて、うまくいったら次のブログも移行したいと思う。また何か進捗あればブログに書きたいと思う。

YumでPHPのバージョン切り替えるの簡単だった

預かったサイトのWordPressは、過去に配布されていた古い高機能テーマを使っていてメンテされておらず、WordPressのアップデートしていいものやら分からないので、新しいテーマを作って置き換えることにした。

で、今回やっと立ち上げたVPS環境にサイトをごっそり入れてみたものの、最初に入れているPHP7.1では、管理画面にアクセスすると、500エラーになってしまった。
ログを見ているとfatalやらwarnやら、コアファイルでたくさんメッセージが出ているから、これはもう、PHP5.6にしてWPをアップデートしない限りどうしようもないなと思って調べたら、Yumだと単に5.6を追加でインストールして、module loadを使えばいいってことで、これは楽だなと感動。

(1) PHP 5.6をインストール(7.1の時と同様)

(2) さりげに php -v とかすると出てこない(汗)which php も効かない。(module loadしないと有効にならない)

(3) 念のため php71をunloadしてからphp56をloadしてみた。

module unload php71
module load php56

めでたし。php -v で5.6になっていることを確認。which php も効いた。

これでWordPressの管理画面にアクセスすると無事、表示された。

[WordPress] 特定の固定ページの子ページを表示させない

検索しても日本語のページは出てこなかったので、丁度いいしおぼえがきとして書いておく。

自分の場合、LPのように長い1ページの中がセクションに分かれているフロントページのそれぞれのセクションを、そのページの子ページとして作成するようなことがある。
カスタムフィールドにするにはなんかボリューム多いね、とか、後からもしかしたら別ページにするかもしれない、という場合だけど。

それで、子ページの方はURL叩いても見えないようにしたいという動機から、これらを表示させないようにした。

この場合、「ホーム」という固定ページ( ID = 2 )の子ページを表示させない。

/* functions.php の記述 */

// ホームの子ページを表示させない
function my_exclude_home_child( $query ) {
    if ( $query->is_page() && $query->is_main_query() ) {
        $query->set( 'post_parent__not_in', array( 2 ) );
    }
}
add_action( 'pre_get_posts', 'my_exclude_home_child' );

以上だけど。

この中のパラメータである post_parent__not_in は、日本語のCodexの中には書かれていなかったが、英語版には書かれている。
https://codex.wordpress.org/Class_Reference/WP_Query
https://developer.wordpress.org/reference/classes/wp_query/

この辺を調べていると、パラメータを日本語でまとめている方がいらしたのでリンクしておく。
https://sole-color-blog.com/blog/265/

今年の抱負に対する結果はどうだったか?について振り返る

今年の1月3日に新年の抱負を書いていた。具体的な内容はすっかり忘れていた。(笑)

今年の抱負というかキーワード

それで、箇条書きの5項目についてそれぞれどうなったかを書いておく。

(1) スマホアプリ(ハイブリッドアプリ)制作のスタディ(→ 勉強のみ)

これは早期に諦めた感半端ない。一応勉強はしたけど、具体的な顧客もそのイメージもないので、本当に「スタディ」で終わってしまった。今後どうするか分からないけど、そういう案件は誰かに振るというのが最も現実的。

(2) Adobe XD を使ったデザイン・プロトタイプ制作(→ できた)

これはもう、自分でデザインしてサイト作るときには必ず使っている。自分の中では定番ツールになった。
先日、ついにXDも正式リリースして有料化されたので、僕もサブスクリプションを追加した。(僕はPSもXDも単体サブスクリプションなのだ)

(3) CodeIgniter を使った簡単なショップカート制作(→ できた)

こちらも進展は大きかった。
手始めにクライアントのサイトの一部に簡単なショップカートを作って組み込んだ。これは単にカートになっているだけで、受注管理とかはなくてメールだけでハンドリングするもの。会員機能もないシンプルなもの。

さらに、ウェブサービスのシステム開発の依頼があったので、そこでCIを使った。実はまだリリースできてなくて保留になっているけれど。
それから、見積もり系のシステムの依頼があって、それにもCIを使った。この秋はそれをひたすらやっていて、一旦Phase1が終わったところ。

CodeIgniter(フレームワーク)の使い方を覚えると、どんどんアプリケーションを作りたくなるね。今後も楽しくやって行くつもり。

(4) WordPress の制作手法の見直し(→ 別のものに興味湧く)

これは WP REST API を活用したいという趣旨だったけれど、結局全然やってない。今後、またやろうとするかもしれないというレベル。
それより、WordPress.com の方に興味が湧いてきていて、いわゆる「サイト作りたいんですけどー」とか「ブログやりたいんですけどー」というニーズに対して一声「これどうですか?」と勧めたいなと思っていて、そのために、自分のブログなりサイトをこのサービス上で運用することを考えつつあるところ。

(5) フロントエンド(→ イメージだけ継続)

とりあえず今のところ、Vue.js をなんとか使いたいと考えているので・・・考えているだけだけど、継続して来年もなんか考えたい。jQueryは便利だけど、そうじゃない世界にも行ってみたいという希望があるので、その辺のモヤモヤが解消できたらいいなと思っているところ。

 

以上のような感じだけど、とりあえずCodeIgniterでアプリケーション作れるようになったのが今年の一番の成果だった。
それと、サイト制作に関しては、必ずしも作ることにこだわらないで便利な(手間いらずな)ツールを利用して効率的にやろうという気持ちになってきたことがあると思う。

というわけで、来年の抱負はまた正月に書くと思う。

WordPressのログインアタックに悩みIP(ホスト)制限でホワイトの設定して落ち着く

最近、WordPressのログインアタックが増えた。中国とか激しい。アメリカもある。
今までウクライナとかが多かったけど、さほど激しいものではなかったので、のんびりしていた。

<従来対策>

・プラグインの Limit Login Attempts を使ってブロックする
・ユーザー名にニックネームを設定する
・テーマの author.php にトップへのリダイレクト命令を書く
・よく来るIPを範囲指定で .htaccess に書いて deny する

という感じだったが、実在ユーザー名でひつこくログインが来るのでなんでだろ?って思っていたら、WP REST API で調べているっぽい。とあるサイトは複数ユーザーで使っており、各ユーザー、順番にものすごい数で来たので驚いたわけだ。
友達が、REST API を無効にするプラグイン Disable REST API を教えてくれたので、早速それを入れたりした。

しかし、みんなで使っているので、知られてしまったユーザー名を変更するのも面倒だなと。

<最終対策>

もう、使う側のアドレスをホワイトに設定するのが確実だなと思って、

アクセスした人のIPアドレスとホスト名を取得するためにPHPで

$ip = $_SERVER['REMOTE_ADDR'];
$host = gethostbyaddr($ip);

あたりを使ってページに表示するコードを書いてサイトにアップし、
ユーザーにそのページにアクセスしてもらって、表示されたアドレスをメールにコピペして教えてもらう。

IPだと範囲とか結構、面倒なので、ホスト名(プロバイダのアクセスポイントレベル)を指定する形で .htaccess に記述して許可する

# WordPressのディレクトリの .htaccess への記述
<Files "wp-login.php">
order deny,allow
deny from all
allow from .bbtec.net
allow from .osaka.ocn.ne.jp
allow from .panda-world.ne.jp
</Files>

# wp-admin ディレクトリの .htaccess への記述
order deny,allow
deny from all
allow from .bbtec.net
allow from .osaka.ocn.ne.jp
allow from .panda-world.ne.jp

こんな感じで。もっといっぱい書いたけど。

結果、ピタッと来なくなった。(当たり前だけど)
一応、従来の対策も併用しておく。特にログイン検知はあったほうが良いだろうと。

<もっと便利な方法>

上記問題のサイトで使っているサーバーには無いのだが、さくらインターネットやXSERVERなど、国外IPアドレスを制限する機能が付いているものならば、それを使ってIP制限すれば簡単なんですな。
ユーザーが海外出張の時などは1クリックで解除しておけば良いし、管理がとても楽。サーバーは管理しやすいものを選ぶべし。