ロリポップでvccw + WordMove

SSHメニュー

ロリポップ、ssh使えるようになってる…スタンダードプランのようだ。

SSHメニュー
SSH使えるんだ!! 😳

ってことは、vccwからWordMove経由で楽ちんだなと喜んでたら、DBに接続できない…。。ログインしたら使えるので制限かかってる様子。。

ローカルにDB持ってきて置換することに

WordMoveでtheme, uploads, pluginsを、DBは、ssh -tでリモートでwp-cliでDBエクスポートして、scpでローカルに持ってきて、wp-cliのsearch-replaceで置換することにした 😀💡

これなら、ちょっと手間だけど、一発ならぬ二発で終わるw

sshは公開鍵でログインできるようにしておくのが前提。

ssh nickname -t "cd web/ && ~/bin/wp db export backup.sql" && scp Host:/path/to/wordpress/backup.sql . && cd wordpress && wp db import ../backup.sql &&  wp search-replace 'old(remote)' 'new(local)'

DBはこれでばっちし👌🏼
ほとんど使う機会ないんだけど、ロリポップもWordMove使えるとホント便利っすなーー 😀

【更新】VCCWで新規追加の際失敗すると思ったら電光石火のアップデートで快適に使えるようになった 😍

VCCWの作者の宮さんのおかげでVCCWはv3.3.0へアップデート!!
squizlabs/php_codesnifferのバージョンを2.9固定?にして無事vagrant upでエラーなしとなりました 😀

本当にありがとうございます!!!!!!!

  • Vagrant 1.9.5
  • VirtualBox バージョン 5.1.22 r115126 (Qt5.6.2)

の構成で、新規にサイトを作成する際、TASK [Install Composer libraries]のタスク部分で、以下のメッセージが出た 😵

...ignoring
failed: [vccw3.dev] (item=wp-coding-standards/wpcs:*) => {"failed": true, "item": "wp-coding-standards/wpcs:*", "msg": "./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Your requirements could not be resolved to an installable set of packages. Problem 1 - Conclusion: remove squizlabs/php_codesniffer 3.0.0 - Conclusion: don't install squizlabs/php_codesniffer 3.0.0 - wp-coding-standards/wpcs 0.3.0 requires squizlabs/php_codesniffer ~2.0 -> satisfiable by squizlabs/php_codesniffer[2.0.0, 2.1.0, 2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1]. - wp-coding-standards/wpcs 0.4.0 requires squizlabs/php_codesniffer ~2.0 -> satisfiable by squizlabs/php_codesniffer[2.0.0, 2.1.0, 2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1]. - wp-coding-standards/wpcs 0.5.0 requires squizlabs/php_codesniffer ~2.2 -> satisfiable by squizlabs/php_codesniffer[2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1]. - wp-coding-standards/wpcs 0.6.0 requires squizlabs/php_codesniffer ~2.2 -> satisfiable by squizlabs/php_codesniffer[2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1]. - wp-coding-standards/wpcs 0.7.0 requires squizlabs/php_codesniffer ~2.2 -> satisfiable by squizlabs/php_codesniffer[2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1]. - wp-coding-standards/wpcs 0.7.1 requires squizlabs/php_codesniffer ~2.2 -> satisfiable by squizlabs/php_codesniffer[2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1]. - wp-coding-standards/wpcs 0.8.0 requires squizlabs/php_codesniffer ~2.2 -> satisfiable by squizlabs/php_codesniffer[2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1]. - wp-coding-standards/wpcs 0.9.0 requires squizlabs/php_codesniffer ~2.2 -> satisfiable by squizlabs/php_codesniffer[2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1]. - wp-coding-standards/wpcs 0.10.0 requires squizlabs/php_codesniffer ^2.6 -> satisfiable by squizlabs/php_codesniffer[2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1]. - wp-coding-standards/wpcs 0.11.0 requires squizlabs/php_codesniffer ^2.8.1 -> satisfiable by squizlabs/php_codesniffer[2.8.1, 2.9.0, 2.9.1]. - Can only install one of: squizlabs/php_codesniffer[2.0.0, 3.0.0]. - Can only install one of: squizlabs/php_codesniffer[2.1.0, 3.0.0]. - Can only install one of: squizlabs/php_codesniffer[2.2.0, 3.0.0]. - Can only install one of: squizlabs/php_codesniffer[2.3.0, 3.0.0]. - Can only install one of: squizlabs/php_codesniffer[2.3.1, 3.0.0]. - Can only install one of: squizlabs/php_codesniffer[2.3.2, 3.0.0]. - Can only install one of: squizlabs/php_codesniffer[2.3.3, 3.0.0]. - Can only install one of: squizlabs/php_codesniffer[2.3.4, 3.0.0]. - Can only install one of: squizlabs/php_codesniffer[2.4.0, 3.0.0]. - Can only install one of: squizlabs/php_codesniffer[2.5.0, 3.0.0]. - Can only install one of: squizlabs/php_codesniffer[2.5.1, 3.0.0]. - Can only install one of: squizlabs/php_codesniffer[2.6.0, 3.0.0]. - Can only install one of: squizlabs/php_codesniffer[2.6.1, 3.0.0]. - Can only install one of: squizlabs/php_codesniffer[2.6.2, 3.0.0]. - Can only install one of: squizlabs/php_codesniffer[2.7.0, 3.0.0]. - Can only install one of: squizlabs/php_codesniffer[2.7.1, 3.0.0]. - Can only install one of: squizlabs/php_codesniffer[2.8.0, 3.0.0]. - Can only install one of: squizlabs/php_codesniffer[2.8.1, 3.0.0]. - Can only install one of: squizlabs/php_codesniffer[2.9.0, 3.0.0]. - Can only install one of: squizlabs/php_codesniffer[2.9.1, 3.0.0]. - Installation request for squizlabs/php_codesniffer (locked at 3.0.0, required as *) -> satisfiable by squizlabs/php_codesniffer[3.0.0]. - Installation request for wp-coding-standards/wpcs * -> satisfiable by wp-coding-standards/wpcs[0.10.0, 0.11.0, 0.3.0, 0.4.0, 0.5.0, 0.6.0, 0.7.0, 0.7.1, 0.8.0, 0.9.0]. Installation failed, reverting ./composer.json to its original content.", "stdout": "./composer.json has been updated\nLoading composer repositories with package information\nUpdating dependencies (including require-dev)\nYour requirements could not be resolved to an installable set of packages.\n\n  Problem 1\n    - Conclusion: remove squizlabs/php_codesniffer 3.0.0\n    - Conclusion: don't install squizlabs/php_codesniffer 3.0.0\n    - wp-coding-standards/wpcs 0.3.0 requires squizlabs/php_codesniffer ~2.0 -> satisfiable by squizlabs/php_codesniffer[2.0.0, 2.1.0, 2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1].\n    - wp-coding-standards/wpcs 0.4.0 requires squizlabs/php_codesniffer ~2.0 -> satisfiable by squizlabs/php_codesniffer[2.0.0, 2.1.0, 2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1].\n    - wp-coding-standards/wpcs 0.5.0 requires squizlabs/php_codesniffer ~2.2 -> satisfiable by squizlabs/php_codesniffer[2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1].\n    - wp-coding-standards/wpcs 0.6.0 requires squizlabs/php_codesniffer ~2.2 -> satisfiable by squizlabs/php_codesniffer[2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1].\n    - wp-coding-standards/wpcs 0.7.0 requires squizlabs/php_codesniffer ~2.2 -> satisfiable by squizlabs/php_codesniffer[2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1].\n    - wp-coding-standards/wpcs 0.7.1 requires squizlabs/php_codesniffer ~2.2 -> satisfiable by squizlabs/php_codesniffer[2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1].\n    - wp-coding-standards/wpcs 0.8.0 requires squizlabs/php_codesniffer ~2.2 -> satisfiable by squizlabs/php_codesniffer[2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1].\n    - wp-coding-standards/wpcs 0.9.0 requires squizlabs/php_codesniffer ~2.2 -> satisfiable by squizlabs/php_codesniffer[2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1].\n    - wp-coding-standards/wpcs 0.10.0 requires squizlabs/php_codesniffer ^2.6 -> satisfiable by squizlabs/php_codesniffer[2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1].\n    - wp-coding-standards/wpcs 0.11.0 requires squizlabs/php_codesniffer ^2.8.1 -> satisfiable by squizlabs/php_codesniffer[2.8.1, 2.9.0, 2.9.1].\n    - Can only install one of: squizlabs/php_codesniffer[2.0.0, 3.0.0].\n    - Can only install one of: squizlabs/php_codesniffer[2.1.0, 3.0.0].\n    - Can only install one of: squizlabs/php_codesniffer[2.2.0, 3.0.0].\n    - Can only install one of: squizlabs/php_codesniffer[2.3.0, 3.0.0].\n    - Can only install one of: squizlabs/php_codesniffer[2.3.1, 3.0.0].\n    - Can only install one of: squizlabs/php_codesniffer[2.3.2, 3.0.0].\n    - Can only install one of: squizlabs/php_codesniffer[2.3.3, 3.0.0].\n    - Can only install one of: squizlabs/php_codesniffer[2.3.4, 3.0.0].\n    - Can only install one of: squizlabs/php_codesniffer[2.4.0, 3.0.0].\n    - Can only install one of: squizlabs/php_codesniffer[2.5.0, 3.0.0].\n    - Can only install one of: squizlabs/php_codesniffer[2.5.1, 3.0.0].\n    - Can only install one of: squizlabs/php_codesniffer[2.6.0, 3.0.0].\n    - Can only install one of: squizlabs/php_codesniffer[2.6.1, 3.0.0].\n    - Can only install one of: squizlabs/php_codesniffer[2.6.2, 3.0.0].\n    - Can only install one of: squizlabs/php_codesniffer[2.7.0, 3.0.0].\n    - Can only install one of: squizlabs/php_codesniffer[2.7.1, 3.0.0].\n    - Can only install one of: squizlabs/php_codesniffer[2.8.0, 3.0.0].\n    - Can only install one of: squizlabs/php_codesniffer[2.8.1, 3.0.0].\n    - Can only install one of: squizlabs/php_codesniffer[2.9.0, 3.0.0].\n    - Can only install one of: squizlabs/php_codesniffer[2.9.1, 3.0.0].\n    - Installation request for squizlabs/php_codesniffer (locked at 3.0.0, required as *) -> satisfiable by squizlabs/php_codesniffer[3.0.0].\n    - Installation request for wp-coding-standards/wpcs * -> satisfiable by wp-coding-standards/wpcs[0.10.0, 0.11.0, 0.3.0, 0.4.0, 0.5.0, 0.6.0, 0.7.0, 0.7.1, 0.8.0, 0.9.0].\n\n\nInstallation failed, reverting ./composer.json to its original content.\n", "stdout_lines": ["./composer.json has been updated", "Loading composer repositories with package information", "Updating dependencies (including require-dev)", "Your requirements could not be resolved to an installable set of packages.", "", "  Problem 1", "    - Conclusion: remove squizlabs/php_codesniffer 3.0.0", "    - Conclusion: don't install squizlabs/php_codesniffer 3.0.0", "    - wp-coding-standards/wpcs 0.3.0 requires squizlabs/php_codesniffer ~2.0 -> satisfiable by squizlabs/php_codesniffer[2.0.0, 2.1.0, 2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1].", "    - wp-coding-standards/wpcs 0.4.0 requires squizlabs/php_codesniffer ~2.0 -> satisfiable by squizlabs/php_codesniffer[2.0.0, 2.1.0, 2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1].", "    - wp-coding-standards/wpcs 0.5.0 requires squizlabs/php_codesniffer ~2.2 -> satisfiable by squizlabs/php_codesniffer[2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1].", "    - wp-coding-standards/wpcs 0.6.0 requires squizlabs/php_codesniffer ~2.2 -> satisfiable by squizlabs/php_codesniffer[2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1].", "    - wp-coding-standards/wpcs 0.7.0 requires squizlabs/php_codesniffer ~2.2 -> satisfiable by squizlabs/php_codesniffer[2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1].", "    - wp-coding-standards/wpcs 0.7.1 requires squizlabs/php_codesniffer ~2.2 -> satisfiable by squizlabs/php_codesniffer[2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1].", "    - wp-coding-standards/wpcs 0.8.0 requires squizlabs/php_codesniffer ~2.2 -> satisfiable by squizlabs/php_codesniffer[2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1].", "    - wp-coding-standards/wpcs 0.9.0 requires squizlabs/php_codesniffer ~2.2 -> satisfiable by squizlabs/php_codesniffer[2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1].", "    - wp-coding-standards/wpcs 0.10.0 requires squizlabs/php_codesniffer ^2.6 -> satisfiable by squizlabs/php_codesniffer[2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.7.1, 2.8.0, 2.8.1, 2.9.0, 2.9.1].", "    - wp-coding-standards/wpcs 0.11.0 requires squizlabs/php_codesniffer ^2.8.1 -> satisfiable by squizlabs/php_codesniffer[2.8.1, 2.9.0, 2.9.1].", "    - Can only install one of: squizlabs/php_codesniffer[2.0.0, 3.0.0].", "    - Can only install one of: squizlabs/php_codesniffer[2.1.0, 3.0.0].", "    - Can only install one of: squizlabs/php_codesniffer[2.2.0, 3.0.0].", "    - Can only install one of: squizlabs/php_codesniffer[2.3.0, 3.0.0].", "    - Can only install one of: squizlabs/php_codesniffer[2.3.1, 3.0.0].", "    - Can only install one of: squizlabs/php_codesniffer[2.3.2, 3.0.0].", "    - Can only install one of: squizlabs/php_codesniffer[2.3.3, 3.0.0].", "    - Can only install one of: squizlabs/php_codesniffer[2.3.4, 3.0.0].", "    - Can only install one of: squizlabs/php_codesniffer[2.4.0, 3.0.0].", "    - Can only install one of: squizlabs/php_codesniffer[2.5.0, 3.0.0].", "    - Can only install one of: squizlabs/php_codesniffer[2.5.1, 3.0.0].", "    - Can only install one of: squizlabs/php_codesniffer[2.6.0, 3.0.0].", "    - Can only install one of: squizlabs/php_codesniffer[2.6.1, 3.0.0].", "    - Can only install one of: squizlabs/php_codesniffer[2.6.2, 3.0.0].", "    - Can only install one of: squizlabs/php_codesniffer[2.7.0, 3.0.0].", "    - Can only install one of: squizlabs/php_codesniffer[2.7.1, 3.0.0].", "    - Can only install one of: squizlabs/php_codesniffer[2.8.0, 3.0.0].", "    - Can only install one of: squizlabs/php_codesniffer[2.8.1, 3.0.0].", "    - Can only install one of: squizlabs/php_codesniffer[2.9.0, 3.0.0].", "    - Can only install one of: squizlabs/php_codesniffer[2.9.1, 3.0.0].", "    - Installation request for squizlabs/php_codesniffer (locked at 3.0.0, required as *) -> satisfiable by squizlabs/php_codesniffer[3.0.0].", "    - Installation request for wp-coding-standards/wpcs * -> satisfiable by wp-coding-standards/wpcs[0.10.0, 0.11.0, 0.3.0, 0.4.0, 0.5.0, 0.6.0, 0.7.0, 0.7.1, 0.8.0, 0.9.0].", "", "", "Installation failed, reverting ./composer.json to its original content."]}

…長いっすね。。。
更に、TASK [Install Ruby gems]でも

changed: [vccw3.dev] => (item=bundler)
...ignoring
failed: [vccw3.dev] (item=wordmove) => {"cmd": "/usr/bin/gem install --version 2.0.2 --user-install --no-document wordmove", "failed": true, "item": "wordmove", "msg": "WARNING:  You don't have /home/vagrant/.gem/ruby/2.3.0/bin in your PATH,\n\t  gem executables will not run.\nERROR:  Error installing wordmove:\n\tphotocopier requires Ruby version ~> 2.4.", "rc": 1, "stderr": "WARNING:  You don't have /home/vagrant/.gem/ruby/2.3.0/bin in your PATH,\n\t  gem executables will not run.\nERROR:  Error installing wordmove:\n\tphotocopier requires Ruby version ~> 2.4.\n", "stdout": "Successfully installed colorize-0.8.1\nSuccessfully installed thor-0.19.4\nSuccessfully installed i18n-0.8.1\nSuccessfully installed thread_safe-0.3.6\nSuccessfully installed tzinfo-1.2.3\nSuccessfully installed concurrent-ruby-1.0.5\nSuccessfully installed activesupport-5.1.1\nSuccessfully installed net-ssh-4.1.0\nSuccessfully installed net-scp-1.2.1\nSuccessfully installed net-ssh-gateway-2.0.0\n", "stdout_lines": ["Successfully installed colorize-0.8.1", "Successfully installed thor-0.19.4", "Successfully installed i18n-0.8.1", "Successfully installed thread_safe-0.3.6", "Successfully installed tzinfo-1.2.3", "Successfully installed concurrent-ruby-1.0.5", "Successfully installed activesupport-5.1.1", "Successfully installed net-ssh-4.1.0", "Successfully installed net-scp-1.2.1", "Successfully installed net-ssh-gateway-2.0.0"]}

っと…😵

一先ず、WordMoveは動くようになった

“Error installing wordmove:tphotocopier requires Ruby version ~> 2.4.”って言っているので、vagrant sshでログイン後、

sudo apt-add-repository ppa:brightbox/ruby-ng
sudo apt-get update
sudo apt-get install ruby2.4 ruby2.4-dev
ruby2.4 -v

とした後、ログアウトし、”vagrant provision”で、WordMoveちゃんと入った 😀

TASK [Install Composer libraries]の方は、

WordPress-Coding-Standards/WordPress-Coding-Standards: PHP_CodeSniffer rules (sniffs) to enforce WordPress coding conventions

Requirements

The WordPress Coding Standards require PHP 5.2 or higher and the PHP_CodeSniffer version 2.9.0 or higher. The WordPress Coding Standards are currently not compatible with the upcoming PHPCS 3 release.

ってあるから、それが原因かなぁと思っているところ。

provision後はWordMove使えてるから一先ず作業はできる。
rubyをインストールする部分のコードを読んで、2.4が入るようになればいいのかなぁ…。

phpcsの方は、金曜日作ったローカル環境が、

  • PHP_CodeSniffer version 3.0.0 (stable) by Squiz (http://www.squiz.net)

コケずにスムーズに作成されていたときのバージョンが、

  • PHP_CodeSniffer version 2.7.1 (stable) by Squiz (http://www.squiz.net)

ってことで、vccwを作成する際に3.0.0以下のバージョンを指定するか、site.yml内でコメントアウトするか悩み中……。

rubyも2.4指定でvccw内にインストールできるのか調べなきゃだ 😅

参考

ssh -t 便利

ローカルからリモートへssh接続後、任意のコマンドを実行したい時便利 😀

参考:SSH (1)

今回は、ヘテムルにあるWordPressのDBをエクスポートする。

ssh nickname -t "cd path/to/wordpress && ~/usr/local/bin/wp db export backup.sql"

こんな感じで行ける。
~/usr/local/bin/wpは適宜変更で 😀
scpとか合わせると、楽ちんだろうな。

大会投稿タイププラグイン作成中💡

イベントでも使えそうだけど、2017年大会、2018年大会など毎年あるイベントのページセットを作りたくて、やってみた。

GitHubリポジトリはコチラ → marushu/km_competition: Plug-in for creating annual event contribution type with parent page and child page set.

カスタム投稿タイプの子ページのセットを作ればいいじゃない

ってことで、

  • 投稿タイプのスラッグを作成
  • 子ページのタイトル、スラッグを必要分追加

で親ページを作ったら、子ページをホイっと下書きで準備しちゃおうというもの。

まだ全然途中だけど、管理画面で上記の機能は準備できた 😀

あとは、

  • Author
  • 翻訳はどうすんの?

を考え中 😅
翻訳は都度違う気がするのでどうしよう…😅

まぁ、とにかく作ろう 😀

投稿タイプ作成

管理画面に入力したスラッグで投稿タイプを作る方法って、どうやんの?って思ったけど、大変ありがたい記事を発見!! 😀💡

参考 : Create Dynamic Custom Post Types in WordPress | Flippercode

ってことで、翻訳はどうすんの?は、管理画面に準備すれば大丈夫そう。
ちょっと項目増えるから面倒だけどねw

子ページセット部分だけ切り出してプラグイン化した方がいいかもだな 😅
カスタム投稿タイプ作るプラグインは沢山あるし、ここをわざわざプラグインの中に入れなくてもいいかも?

とりあえずはこのまま行ってみよう!! 😀

複数のPhpStormのプロジェクトをMacのターミナルから開く

PhpStorm。多機能すぎて全然使いこなせてないけど、今日2017.1.2にアップデートした。(2016年12月でライセンス切れてた…)

複数のプロジェクトをターミナルから開けない

あんまり一度に複数のプロジェクトを開くことはないんだけど、以前は、プロジェクトのルートディレクトリで

phpstorm .

で複数開けてたんだけど、できなくなった。
もちろん、System Settings > Project Openingの設定は、Open project in new windowにしてある。

Tool > Create Command-line Launcher…で作り直した

これで直った。
phpstormで作ってたんだけど、今回は pstormで 😅
特に理由はないけど。
/usr/lobal/bin/xxxxx(決めた名前)にスクリプトが作られる。

中身はこれ↓↓

# open phpstorm from current directory
export PATH=$PATH:/usr/local/bin/pstorm

でsource ~/.bash_profileで無事複数開けるようになった 😀💡
場所は、/usr/local/bin/pstorm
中身は、

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import socket
import struct
import sys
import os
import time

# see com.intellij.idea.SocketLock for the server side of this interface

RUN_PATH = u'/Applications/PhpStorm.app'
CONFIG_PATH = u'/Users/oredayo/Library/Preferences/PhpStorm2017.1'
SYSTEM_PATH = u'/Users/oredayo/Library/Caches/PhpStorm2017.1'


def print_usage(cmd):
    print(('Usage:\n' +
           '  {0} -h | -? | --help\n' +
           '  {0} [project_dir]\n' +
           '  {0} [-l|--line line] [project_dir|--temp-project] file[:line]\n' +
           '  {0} diff <left> <right>\n' +
           '  {0} merge <local> <remote> [base] <merged>').format(cmd))


def process_args(argv):
    args = []

    skip_next = False
    for i, arg in enumerate(argv[1:]):
        if arg == '-h' or arg == '-?' or arg == '--help':
            print_usage(argv[0])
            exit(0)
        elif i == 0 and (arg == 'diff' or arg == 'merge' or arg == '--temp-project'):
            args.append(arg)
        elif arg == '-l' or arg == '--line':
            args.append(arg)
            skip_next = True
        elif skip_next:
            args.append(arg)
            skip_next = False
        else:
            path = arg
            if ':' in arg:
                file_path, line_number = arg.rsplit(':', 1)
                if line_number.isdigit():
                    args.append('-l')
                    args.append(line_number)
                    path = file_path
            args.append(os.path.abspath(path))

    return args


def try_activate_instance(args):
    port_path = os.path.join(CONFIG_PATH, 'port')
    token_path = os.path.join(SYSTEM_PATH, 'token')
    if not (os.path.exists(port_path) and os.path.exists(token_path)):
        return False

    with open(port_path) as pf:
        port = int(pf.read())
    with open(token_path) as tf:
        token = tf.read()

    s = socket.socket()
    s.settimeout(0.3)
    try:
        s.connect(('127.0.0.1', port))
    except (socket.error, IOError):
        return False

    found = False
    while True:
        try:
            path_len = struct.unpack('>h', s.recv(2))[0]
            path = s.recv(path_len)
            if os.path.abspath(path) == os.path.abspath(CONFIG_PATH):
                found = True
                break
        except (socket.error, IOError):
            return False

    if found:
        cmd = 'activate ' + token + '\0' + os.getcwd() + '\0' + '\0'.join(args)
        encoded = struct.pack('>h', len(cmd)) + cmd
        s.send(encoded)
        time.sleep(0.5)  # don't close the socket immediately
        return True

    return False


def start_new_instance(args):
    if sys.platform == 'darwin':
        if len(args) > 0:
            args.insert(0, '--args')
        os.execvp('open', ['-a', RUN_PATH] + args)
    else:
        bin_file = os.path.split(RUN_PATH)[1]
        os.execv(RUN_PATH, [bin_file] + args)


ide_args = process_args(sys.argv)
if not try_activate_instance(ide_args):
    start_new_instance(ide_args)

作り直す前がこれ↓↓

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import socket
import struct
import sys
import os
import time

# see com.intellij.idea.SocketLock for the server side of this interface

RUN_PATH = u'/Applications/PhpStorm.app'
CONFIG_PATH = u'/Users/oredayo/Library/Preferences/PhpStorm2016.3'
SYSTEM_PATH = u'/Users/oredayo/Library/Caches/PhpStorm2016.3'


def print_usage(cmd):
    print(('Usage:\n' +
           '  {0} -h | -? | --help\n' +
           '  {0} [-l|--line line] file[:line]\n' +
           '  {0} diff <left> <right>\n' +
           '  {0} merge <local> <remote> [base] <merged>').format(cmd))


def process_args(argv):
    args = []

    skip_next = False
    for i, arg in enumerate(argv[1:]):
        if arg == '-h' or arg == '-?' or arg == '--help':
            print_usage(argv[0])
            exit(0)
        elif arg == 'diff' and i == 0:
            args.append(arg)
        elif arg == 'merge' and i == 0:
            args.append(arg)
        elif arg == '-l' or arg == '--line':
            args.append(arg)
            skip_next = True
        elif skip_next:
            args.append(arg)
            skip_next = False
        else:
            if ':' in arg:
                file_path, line_number = arg.rsplit(':', 1)
                if line_number.isdigit():
                    args.append('-l')
                    args.append(line_number)
                    args.append(os.path.abspath(file_path))
                else:
                    args.append(os.path.abspath(arg))
            else:
                args.append(os.path.abspath(arg))

    return args


def try_activate_instance(args):
    port_path = os.path.join(CONFIG_PATH, 'port')
    token_path = os.path.join(SYSTEM_PATH, 'token')
    if not (os.path.exists(port_path) and os.path.exists(token_path)):
        return False

    with open(port_path) as pf, open(token_path) as tf:
        port = int(pf.read())
        token = tf.read()

    s = socket.socket()
    s.settimeout(0.3)
    try:
        s.connect(('127.0.0.1', port))
    except (socket.error, IOError):
        return False

    found = False
    while True:
        try:
            path_len = struct.unpack('>h', s.recv(2))[0]
            path = s.recv(path_len)
            if os.path.abspath(path) == os.path.abspath(CONFIG_PATH):
                found = True
                break
        except (socket.error, IOError):
            return False

    if found:
        cmd = 'activate ' + token + '\0' + os.getcwd() + '\0' + '\0'.join(args)
        encoded = struct.pack('>h', len(cmd)) + cmd
        s.send(encoded)
        time.sleep(0.5)  # don't close the socket immediately
        return True

    return False


def start_new_instance(args):
    if sys.platform == 'darwin':
        if len(args) > 0:
            args.insert(0, '--args')
        os.execvp('open', ['-a', RUN_PATH] + args)
    else:
        bin_file = os.path.split(RUN_PATH)[1]
        os.execv(RUN_PATH, [bin_file] + args)


ide_args = process_args(sys.argv)
if not try_activate_instance(ide_args):
    start_new_instance(ide_args)

Contact Form 7とFlamingoを使って契約中の部屋に空きが出たら通知するプラグイン作ってみた

GitHubはコチラ → marushu/kktt_free_room_announce: Send mail at the timing when the room status changes from contracting or negotiating to free.

…まだ途中。。😅

タイトル通り。
倉庫のような限られたスペースで、「契約中」「商談中」「空きあり」の3つのステータスがあって、ステータスが「空きあり」になったらメールで通知する仕組み。

Contact Form 7Flamingoを使ってメールの登録や自動返信・データの保存などをやって、ステータスの変更をトリガーにメールを送る感じ。

Flamingoは今までお客さんのサイトで入れてはいたけど、そこからデータを取り出して使うってことはしてなかった。

flamingo_inbound投稿タイプ

Flamingoは受信メッセージというメニューがあるんだけど、これ、flamingo_inboundっていう投稿タイプ。

Contact Form 7でPOSTされてきた各データをflamingo_inbound投稿タイプ内にカスタムフィールドを作って格納してくれる。
例えば、[your-name]ってフィールドだったら、_field_your-nameといった感じ。

複数フォームがあっても、flamingo_inbound_channelタクソノミーで判別できる。

Contact Form 7は言うまでもなく凄いけど、

Flamingoももの凄い便利!!!!!!! あざまーーーーっす!!!

ということで、仕組みとしては、

  • 通知の欲しいメールアドレスと、部屋をフォームで選択
  • 送られてきたメールアドレスと部屋情報をFlamingoから参照
  • 部屋のステータスが空きに変わったら、そのメールアドレスへメール送信

通知の欲しい部屋の選択画面

各セルをクリックすると、hiddenフィールドに値(a-01など)を格納

管理画面

ここで契約中・商談中・空きありの3つのステータスを変更

空き待ち状況

空き待ちリスト。

ステータスが空きに変わったら待ちリストの該当メールアドレスへ通知

メール出通知。一度送ったらリストから削除する感じ 😀

といった感じ。
まだ調整は必要なんだけど、期待通りに動いたので一先ず 😀

連想配列に同じ値を入れない

$total_arr = array();
$key_arr_count = count( $key_arr );
for ( $h = 0; $h < $key_arr_count; $h++ ) {

  if ( ! array_key_exists( $key_arr[ $h ], $total_arr ) ) {

    $total_arr[ $key_arr[ $h ] ]['email'] = (array) $mail_arr[ $h ];

  } else {

      $total_arr[ $key_arr[ $h ] ]['email'][] = $mail_arr[ $h ];

  }

  $total_arr[ $key_arr[ $h ]]['post_id'] = $post_id_arr[ $h ];

}

$sort_flag = ksort( $total_arr );

メールアドレスを選択したセルに紐付けるために、という配列を作った。
元の配列は、メールにセルデータが複数入っているんだけど、逆にセルにメールアドレスを紐付けた。要は入れ替えたかったんすよね。

期待通りに動いたなと思ってたら、1つのセルに同じメールアドレスが複数並んでしまった。。

array (size=3)
  'a-01' => 
    array (size=2)
      'email' => 
        array (size=2)
          0 => string 'test@testhage.com' (length=16)
          1 => string 'test@testhage.com' (length=16)
      'post_id' => int 407
  'a-03' => 
    array (size=2)
      'email' => 
        array (size=3)
          0 => string 'test@testhage.com' (length=16)
          1 => string 'test@testhage.com' (length=16)
          2 => string 'test@testhage.com' (length=16)
      'post_id' => int 405
  'a-04' => 
    array (size=2)
      'email' => 
        array (size=3)
          0 => string 'test@testhage.com' (length=16)
          1 => string 'test@testhage.com' (length=16)
          2 => string 'test@testhage.com' (length=16)
      'post_id' => int 405

…こんな感じ。。
重複ないように入れないとマズイんだけど、しばらくわからなかった…😅
できあがった、$total_arrをforeachで回してarray_uniqueでとかいろいろやったんだけど、イマイチしっくりこなかった。。

で、ようやくわかったのがコレ↓↓

$total_arr = array();
$key_arr_count = count( $key_arr );
for ( $h = 0; $h < $key_arr_count; $h++ ) {

  if ( ! array_key_exists( $key_arr[ $h ], $total_arr ) ) {
  
    $total_arr[ $key_arr[ $h ] ]['email'] = (array) $mail_arr[ $h ];
    
  } else {

    if ( ! in_array( $mail_arr[ $h ], $total_arr[ $key_arr[ $h ] ]['email'] ) ) {

      $total_arr[ $key_arr[ $h ] ]['email'][] = $mail_arr[ $h ];

    }

  }

  $total_arr[ $key_arr[$h]]['post_id'] = $post_id_arr[ $h ];

}

配列作るときにやればいいじゃない!!ってのに気づくの遅いよ (*_*)
で、無事期待通りに出るようになった ↓↓

array (size=3)
  'a-01' => 
    array (size=2)
      'email' => 
        array (size=2)
          0 => string 'test@hagechirakasi.com' (length=22)
          1 => string 'test@testhage.com' (length=16)
      'post_id' => int 407
  'a-03' => 
    array (size=2)
      'email' => 
        array (size=2)
          0 => string 'test@hagechirakasi.com' (length=22)
          1 => string 'test@testhage.com' (length=16)
      'post_id' => int 405
  'a-04' => 
    array (size=2)
      'email' => 
        array (size=2)
          0 => string 'test@hagechirakasi.com' (length=22)
          1 => string 'test@testhage.com' (length=16)
      'post_id' => int 405
めでたし、めでたし 😀

wordmove pull -d で怒られた。。

ERROR 3167 (HY000) at line 17 in file: '/var/www/html/wp-content/dump.sql': The 'INFORMATION_SCHEMA.SESSION_VARIABLES' feature is disabled; see the documentation for 'show_compatibility_56'
/home/vagrant/.gem/ruby/2.3.0/gems/wordmove-2.0.0/lib/wordmove/deployer/base.rb:132:in `run': Return code reports an error (Wordmove::ShellCommandError)
	from /home/vagrant/.gem/ruby/2.3.0/gems/wordmove-2.0.0/lib/wordmove/deployer/ssh.rb:40:in `pull_db'
	from /home/vagrant/.gem/ruby/2.3.0/gems/wordmove-2.0.0/lib/wordmove/cli.rb:69:in `block in pull'
	from /home/vagrant/.gem/ruby/2.3.0/gems/wordmove-2.0.0/lib/wordmove/cli.rb:37:in `block in handle_options'
	from /home/vagrant/.gem/ruby/2.3.0/gems/wordmove-2.0.0/lib/wordmove/cli.rb:36:in `each'
	from /home/vagrant/.gem/ruby/2.3.0/gems/wordmove-2.0.0/lib/wordmove/cli.rb:36:in `handle_options'
	from /home/vagrant/.gem/ruby/2.3.0/gems/wordmove-2.0.0/lib/wordmove/cli.rb:68:in `pull'
	from /home/vagrant/.gem/ruby/2.3.0/gems/thor-0.19.4/lib/thor/command.rb:27:in `run'
	from /home/vagrant/.gem/ruby/2.3.0/gems/thor-0.19.4/lib/thor/invocation.rb:126:in `invoke_command'
	from /home/vagrant/.gem/ruby/2.3.0/gems/thor-0.19.4/lib/thor.rb:369:in `dispatch'
	from /home/vagrant/.gem/ruby/2.3.0/gems/thor-0.19.4/lib/thor/base.rb:444:in `start'
	from /home/vagrant/.gem/ruby/2.3.0/gems/wordmove-2.0.0/exe/wordmove:6:in `&lt;top (required)&gt;'
	from /home/vagrant/.gem/ruby/2.3.0/bin/wordmove:23:in `load'
	from /home/vagrant/.gem/ruby/2.3.0/bin/wordmove:23:in `&lt;main&gt;'

wordmove pull -dで怒られた(エラー出た…)

-tpuはちゃんとpullできてるから、Movefileは間違ってない。
今までは普通にできてたのに…

show_compatibility_56見ろよ?って言われたので調べてみた。

参考

 

mysql> resetconnection;
mysql> set @@global.show_compatibility_56=ON;
ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operation

って言われたので、rootでログインして

mysql -u root
mysql> set @@global.show_compatibility_56=ON;
Query OK, 0 rows affected (0.00 sec)

で行けたので、wordmove pull -d すると、

▬▬ ✓ Pulling Database ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
    local | mysqldump --host=host --user=wordpress --password=wordpress --default-character-set=utf8 --result-file="/var/www/html/wp-content/local-backup-1491442332.sql" wordpress
mysqldump: [Warning] Using a password on the command line interface can be insecure.
gzip --best --force "/var/www/html/wp-content/local-backup-1491442332.sql"
    local | gzip --best --force "/var/www/html/wp-content/local-backup-1491442332.sql"
   remote | mysqldump --host=localhost --user=user --password=password --default-character-set=utf8 --result-file="/var/www/vhosts/domain/wp-content/dump.sql" domain_name
gzip --best --force "/var/www/vhosts/domain/wp-content/dump.sql"
   remote | gzip --best --force "/var/www/vhosts/domain/wp-content/dump.sql"
   remote | get: /var/www/vhosts/domain/wp-content/dump.sql.gz /var/www/html/wp-content/dump.sql.gz
   remote | delete: /var/www/vhosts/domain/wp-content/dump.sql.gz
gzip -d --force "/var/www/html/wp-content/dump.sql.gz"
    local | gzip -d --force "/var/www/html/wp-content/dump.sql.gz"
    local | adapt dump
    local | mysql --host=host --user=wordpress --password=wordpress --default-character-set=utf8 --database=wordpress --execute="SET autocommit=0;SOURCE /var/www/html/wp-content/dump.sql;COMMIT"
mysql: [Warning] Using a password on the command line interface can be insecure.
    local | delete: '/var/www/html/wp-content/dump.sql'

っとなって、無事pull完了となった。

…今まで問題なかったんだけど、何故こうなっちゃってるのかまだ不明…😅

別の更新が現在進行中です。

wp core upadte –locale=ja –force && wp core update-db && wp core language update

と打っちゃいました。。。( ꒪⌓꒪)
ほんと、tab補完を使いましょう(俺だよ)。

Error: 'upadte' is not a registered subcommand of 'core'. See 'wp help core'.

ごめんなさい、ごめんなさい。。
気を取り直して、改めて入力しなおすと、

Updating to version 4.7.2 (ja)...
Error: 別の更新が現在進行中です。

…と。。

前にも出たことはあったんですが、特に調べもせずだったので、ググってみると、結構皆さんハマってらっしゃるようで、沢山記事出てました。

参考 : WordPressの更新で”別の更新が現在進行中です。”エラーが出るときにすべき事

ありがとうございます!!!
ということで、15分待てばOKみたいですが、そんな待てない。。

参考 : WordPress「別の更新が現在進行中です。」の対処方2つ | Thought is free

  • DB から core_updater.lock を消す

これですね 😀

ということで、ローカル(VCCW)でやっていたので、

mysql -u wordpress -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 31
Server version: 5.7.16-0ubuntu0.16.04.1 (Ubuntu)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| wordpress          |
+--------------------+
2 rows in set (0.00 sec)

mysql> use wordpress;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

mysql> show tables;
+-----------------------+
| Tables_in_wordpress   |
+-----------------------+
| wp_commentmeta        |
| wp_comments           |
| wp_links              |
| wp_options            |
| wp_postmeta           |
| wp_posts              |
| wp_term_relationships |
| wp_term_taxonomy      |
| wp_termmeta           |
| wp_terms              |
| wp_usermeta           |
| wp_users              |
+-----------------------+
12 rows in set (0.00 sec)

mysql> select * from wp_options where option_name = 'core_update.locl';
Empty set (0.00 sec)

mysql> delete from wp_options where option_name = 'core_updater.lock';
Query OK, 1 row affected (0.01 sec)

えーっと、タイプミスひどいですね…😅
これで、「別の更新が現在進行中です。」は消えました 😀

タイプミスは気をつけないとですね…😅

自分もCoreを確認してみる

/**
	 * Creates a lock using WordPress options.
	 *
	 * @since 4.5.0
	 * @access public
	 * @static
	 *
	 * @param string $lock_name       The name of this unique lock.
	 * @param int    $release_timeout Optional. The duration in seconds to respect an existing lock.
 *                                Default: 1 hour.
	 * @return bool False if a lock couldn't be created or if the lock is still valid. True otherwise.
	 */
public static function create_lock( $lock_name, $release_timeout = null ) {
	global $wpdb;
	if ( ! $release_timeout ) {
		$release_timeout = HOUR_IN_SECONDS;
	}
	$lock_option = $lock_name . '.lock';

	// Try to lock.
	$lock_result = $wpdb->query( $wpdb->prepare( "INSERT IGNORE INTO `$wpdb->options` ( `option_name`, `option_value`, `autoload` ) VALUES (%s, %s, 'no') /* LOCK */", $lock_option, time() ) );

	if ( ! $lock_result ) {
		$lock_result = get_option( $lock_option );

		// If a lock couldn't be created, and there isn't a lock, bail.
		if ( ! $lock_result ) {
			return false;
		}

		// Check to see if the lock is still valid. If it is, bail.
		if ( $lock_result > ( time() - $release_timeout ) ) {
			return false;
		}

		// There must exist an expired lock, clear it and re-gain it.
		WP_Upgrader::release_lock( $lock_name );

		return WP_Upgrader::create_lock( $lock_name, $release_timeout );
	}

	// Update the lock, as by this point we've definitely got a lock, just need to fire the actions.
	update_option( $lock_option, time() );

	return true;
}

/wp-admin/includes/class-wp-upgrader.php の826行目〜のWP_Upgraderクラスの中にあるんですね〜😀

get_extendedで続きを読むにはログインまたは会員登録ボックスを作る

ログインまたは、会員登録

記事の途中で、「続きを読むには…」というコンテンツを見かけます。
個人的には一手間が面倒なので、丸ごと会員制にしちゃって展開した方がいいのかなぁと思ったりするんですが、会員を増やしたいという運営サイドの意図があると、そういう構成になりますよね?って思います。

面倒とか言っておきながら、「おっ!!」っと思う記事に出会うと、会員登録してますw

WordPressでやるには?

ビジュアルエディタの“「続きを読む」タグを挿入”を使うとあっさりできちゃいました。

<!-- more -->タグ入れるやつ。
<!–more–>が入るやつです。

参考 : 「続きを読む」のカスタマイズ – WordPress Codex 日本語版

WordPress サイトのトップページに投稿の抜粋を表示して訪問者の興味を引き、タイトルやリンクのクリックで、続けて投稿や記事の全文へガイドするテクニックがあります。WordPress では簡単にこのテクニックをカスタマイズ可能な方法で実現できます。

ビジュアルエディタで実際に使うと、↓↓のように区切りが入ります。

「続きを読む」タグが挿入されたところ
「続きを読む」タグが挿入されたところ。

知ってる用途としては、アーカイブページだけだと思ってたんですが、大変便利な関数がありました 😀

get_extended

参考 : 関数リファレンス/get extended – WordPress Codex 日本語版

読みますと、

投稿本文を <!–more–> で区切った内容を各々取得します。戻り値は main と extend のキーからなる連想配列です。main キーの配列には <!–more–> より前の本文、extend キーの配列には <!–more–> より後の本文が入っています。

2つ目のダッシュ(-)と ‘more’ の間にはスペースは入れないでください。’more’ の後のスペースは無視されます。

とありました。
ってことは、<!–more–>の前(mainキーの中身)を読ませて、後(extendedキー)はログインしないと出ないようにしてしまえばいいわけですよね 😀💡✨️

ソースを見てみる

参考 : get_extended() | Function | WordPress Developer Resources

<?php
function get_extended( $post ) {
    //Match the new style more links.
    if ( preg_match('/&lt;img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-more="more" data-wp-more-text="(.*?)?" class="wp-more-tag mce-wp-more" alt="" title="続きを読む..." data-mce-resize="false" data-mce-placeholder="1" /&gt;/', $post, $matches) ) {
        list($main, $extended) = explode($matches[0], $post, 2);
        $more_text = $matches[1];
    } else {
        $main = $post;
        $extended = '';
        $more_text = '';
    }
 
    //  leading and trailing whitespace.
    $main = preg_replace('/^[\s]*(.*)[\s]*$/', '\\1', $main);
    $extended = preg_replace('/^[\s]*(.*)[\s]*$/', '\\1', $extended);
    $more_text = preg_replace('/^[\s]*(.*)[\s]*$/', '\\1', $more_text);
 
    return array( 'main' =&gt; $main, 'extended' =&gt; $extended, 'more_text' =&gt; $more_text );
}

投稿の中身を<!–more–>で分けてます。

あとは、特定のカテゴリだけや、カスタムフィールドを追加して投稿個別に

  • <!–more–>以降はログインが必要な記事
  • 誰でも読める記事

っと、<!–more–>ボタンで区切ればOK。
今回は、カスタムフィールドで作ったんですが、extendedが空の場合は、全文とか、分岐の部分で何度かミスをしちゃいました… 😅

コードはこんな感じ。

できあがりはこんな感じ。

ログインまたは、会員登録
ログイン後は、見ているページへ戻す。

フワッと白くぼけている部分は、box-shadowを上にずらせばいい感じに。

.login-register {
  box-shadow: 0px -75px 50px 34px rgba(255, 255, 255, 0.9);
}

分岐で最初勘違いしてて、どの記事にもログインボックスを出してしまったりしましたが、一先ずこれで、続きを読むにはログインが必要なコンテンツはできました。

get_extended大変便利な関数でした〜。WordPressが1.0.0の時からあるんですね〜 😀