【wordpress】プラグインのクラス化
概要
wordpressのプラグインをクラス化する場合に必要な情報です。
プラグインのクラス化
コンストラクタでhookを登録し、処理を実装します。
class XXX_Plugin { // hookを登録します public function __construct() { } } new XXX_Plugin();
action hookへ関数を登録する場合には、呪文が必要になります。
array( $this, メソッド名 )
【参考】 関数リファレンス/add action - WordPress Codex 日本語版
メソッド呼び出しには$thisを付ける必要があります。
【参考】 WordPressプラグインをクラス定義する方法 | Developers.IO
定数の使い方
クラス化しない場合には、defineを使って定数を宣言します。この定数名はグローバルなので名前の生得に気を付ける必要がありました。クラス化するとクラス変数になるため、名前の衝突は気にしなくて済みます。
定数にはクラス変数としてアクセスする必要があります。
class MyClass { const CONSTANT = 'constant value'; function showConstant() { echo self::CONSTANT . "\n"; } }
プラグインの有効化/無効化/削除で処理を実行する
それぞれのhookを実装します。
- register_activation_hook
- register_deactivation_hook
- register_uninstall_hook
【参考】 WordPress でプラグインを無効化したときにオプションを消すには
これらのイベントでデータベースの作成・削除を行うことが多いと思います。
【参考】 WordPressのプラグインでデータベースを作成・削除・アップデートする方法
データベース作成が失敗した場合には、SQLコマンドの大文字化をしてみるよ良いかもしれません。
【参考】 WordPress の dbDelta() でテーブルが作成されない
Windows 10/VirtualBox/Vagrantでvagrant upに失敗する件
概要
昨年(2015)夏に、Windows10にアップデートして以来、ずっとvagrant upできずにいましたが、以下の記事の方法でやっとできるようになりました。感謝です。 Pocket: Windows 10 + VirtualBox 5.0 + Vagrant 1.7.4 + VCCW 2.18.0 でのエラー回避
詳細
VirtualBoxをネットワークタイプを指定してインストールすると、vagrant upできるようになりました。
VirtualBox-5.0.10-104061-Win.exe -msiparams NETWORKTYPE=NDIS5
現在は、Windows10 + VirtualBox(5.0.14) + vagrant(1.8.1)でvagrant upできています。
VirtualBoxのNDIS6ドライバ?がWindows10に対応していないということなのかな?
関連情報
【wordpress】検証環境構築方法
概要
本番環境のデータを使ってwordpress検証環境を作成してみました。
本環境と同じホストに検証環境を作成する場合、DB設定を間違えるとたいへんな事故(データの紛失)が起こる可能性があります。くれぐれもご注意ください。
最初は、ローカル環境で試してみてください。
方針
以下の検証環境を構築します。DB名だけでなく、ユーザ名、パスワードも変えている方が安全です。
本番環境 | 検証環境 | |
---|---|---|
URL | http://wordpress.com | http://test.wordpress.com |
パス | /var/www/wordpress | /var/www/test.wordpress |
DB名 | wp | test_wp |
手順
ドメイン・ゾーンを編集します
test.wordpress.comを追加します。
バックアップを作成します
■mysql
ユーザーは、権限があるユーザーであればroot以外でもOKです。
mysqldump -u root -p wp > xxx.dump
■wordpress
同一ホストであればコピーできます。
# cp -rp /var/www/wordpress /var/www/test.wordpress # chown -R apache:apache /var/www/html/test.wordpress
編集します4>
■mysql
DBの中にある、http://wordpress.comを変更後のhttp://test.wordpress.comに変換します。
$ sed -e 's/http:\/\/wordpress.com/http:\/\/test.wordpress.com/g' xxx.dump < yyy.dump
検証環境用のDBを作成し、データをimportします。
$ mysql -u root -p mysql> create database wp3 default character set utf8; mysql> grant all privileges on test_wp.* to ユーザー名@localhost identified by 'パスワード'; mysql> exit; $ mysql -u root -p test_wp < yyy.dump
■wordpress
wp-config.phpのDBに関する設定を検証環境のものに変更します。 安全(secure)な名前/パスワードを設定してください。
define('DB_NAME', 'test_wp'); /** MySQL database username */ define('DB_USER', 'aaaa'); /** MySQL database password */ define('DB_PASSWORD', 'bob');
apacheの設定を変更します
/etc/httpd/conf/httpd.confを修正します。
検証環境には一般に公開しないので、Basic認証を設定していた方が良いと思います。
Basic認証のパスワード作成方法は、Webにたくさん存在します。たとえば、 Webサーバ構築〜Apacheインストール・Basic認証 - Qiitaを参照してください。
<VirtualHost *:80> DocumentRoot /var/www/test.wordpress DirectoryIndex index.php Options -Indexes ServerName test.workdpress.com <Directory /var/www/test.wordpress> AllowOverride All AuthUserFile /var/www/.htpasswd AuthName "Enter your ID and password." AuthType Basic require valid-user <fModule mod_rewrite.c> RewriteEngine On RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule> </Directory> </VirtualHost>
apacheを起動します。
$ sudo service httpd reload
wordpress:ユーザー一覧取得
ユーザー一覧取得
検索条件を配列にセットして、検索を実行します。
$args = array ( 'role' => 'reporter', 'order' => 'ASC', 'orderby' => 'display_name', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'キー名', 'value' => 値, 'compare' => '=' ) ) ); $wp_user_query = new WP_User_Query( $args ); $users = $wp_user_query->get_results(); foreach ( $users as $user ) { echo "<p>" . esc_html( $user->user_email ) . "</p>"; }
関連資料
メールサーバーのSPF登録しました
概要
gmailアドレス宛に送信したメールがスパムメールになりやすいということで、SPFレコードを登録しました。SPFとは
SPF (Sender Policy Framework)とは、 電子メールの送信元ドメインが詐称されていないかを検査するための仕組みのようです。
日本ネットワークインフォメーションの説明がわかりやすいです。
SPFレコード登録
DNSレコードに以下のデータを追加します。
エントリ名 | @ |
タイプ | TXT |
データ | v=spf1 ip4:XXX.XXX.XXX.XXX(ipアドレス) ~all |
SPFレコード確認
Mac OS Xだと以下のコマンドで確認できます。
$ dig メールサーバ txt
dmarcian - SPF Surveyorでも確認できます。
関連情報
SSL証明書の整合性チェック
秘密鍵とSSL証明書の整合性エラー
SSL証明書をインストールする場合、サーバー証明書と秘密鍵が合わない場合、以下のエラーメッセージが出力されます。注)ここでは、メールサーバーはpostfix/dovecotで構築しています。
SSL証明書と秘密鍵を設定します。 # vi /etc/dovecot/conf.d/10-ssl.conf dovecot:設定を再読込します。 # /etc/init.d/dovecot reload ログをチェックします。 # tail /var/log/dovecot/dovecot.log ... Feb 11 10:42:41 imap-login: Fatal: Can't load private ssl_key: Key is for a diff erent cert than ssl_cert ...
整合性チェック
SSL証明書を取得している時点では以下のファイルを持っているはずです。この中の前半2ファイルは、SSL証明書の申請者が作成します。server.csrファイルに基づき、サーバー証明書と中間証明書を発行してくれます。
ここを参考に、秘密鍵とサーバー証明書の整合性をチェックします。
$ openssl x509 -noout -modulus -in 証明書ファイル | md5sum $ openssl rsa -noout -modulus -in 秘密鍵ファイル | md5sum
メールサーバーのSSL化は無事に完了しました。
原因
整合性エラーが発生したのは、メールで送信された証明書のコピペミスでした。今回使った、アルファSSLは、証明書をメール本文に埋め込んでいます。コピペを失敗するのもアレですが、添付ファイルとして送信くれていたら...と思います。
整合性チェック方法を学ぶことが出来たのでよしとします。
参考資料
Tensor flow:reactivekk社のデモを動かしてみました
概要
前回は、GoogleのTensorflowを試してみました。今回は、はじめてのテンサーフローワークショップに参加しました - Qiitaテンサーフローワークショップの題材となった、reactivekk社が公開しているデモを動かしてみました。ipython notebookを使って、結果をブラウザ上に出力するデモです。計算モデルが可視化されるすぐれものです。
tensor flow実行環境を構築します
python環境を構築します
pythonはHomebrewを使ってインストールしました。
$ brew install python $ python -V Python 2.7.10
python用パッケージマネージャーをインストールします。
$ sudo easy_install pip $ pip --version pip 7.1.2 from /Library/Python/2.7/site-packages/pip-7.1.2-py2.7.egg (python 2.7)
tensor flow実行環境を準備します
virtualenvを使います。virtualenvは以下の特長を持っています。詳しくは、Amazon.co.jp: Pythonプロフェッショナルプログラミング第2版を参照してください。
- OSの管理権限を持っていなくてもPythonライブラリをvirtualenv内だけに自由にインストール出来ます。
- 目的別にライブラリをインストールするので不要なライブラリに邪魔されることがありません。
- 使わなくなったらディレクトリごと削除できます。
- activate/deactivateコマンドでvirtualenv環境ON/OFFを切り替えることができます。
MacOSX Yosemiteから、一部のディレクトリにファイルを書き込むことができなくなったため、virtualenvを使った方が問題が発生する可能性が少ないです。
適当なディレクトリにvirtualenvを作成して、activateします。
$ cd work/python $ virtualenv tensorflow $ source tensorflow/bin/activate (tensorflow)[~/work/python]$
tensorflowをインストールします。
(tensorflow)[~/work/python]$ pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0-py2-none-any.whl
reactivekk社のデモ実行環境を構築します
python notebookが動く環境を構築します。
jupyterをインストールしないと、ImportError: No module named notebook.notebookappというエラーがでます。詳しくは、 pip install jupyterを参照してください。
$ pip install ipython $ pip install numpy matplotlib $ pip install jupyter
python notebookを実行します。ブラウザ上にページが開きます。
(tensorflow)[~/work/python]$ ipython notebook [I 06:19:41.965 NotebookApp] Serving notebooks from local directory: /Users/unokun/work/python [I 06:19:41.965 NotebookApp] 0 active kernels [I 06:19:41.965 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/ [I 06:19:41.966 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
reactivekk社のデモを実行します
モジュールをダウンロードします
適当なディレクトリにモジュールを取得します。
$ git clone https://github.com/reactivekk/tensorflow-getting-started.git
モジュールをアップロードします
python bookで実行している画面でuploadボタンを押下し、ダウンロードしたファイル(TensorFlow Mnist.ipynb)をアップロードします。以下が出力されれば成功です。
おまけ
pipでインストールしたモジュール一覧は以下のコマンドで調べることができます。
(tensorflow)[~/work/python]$ pip freeze appnope==0.1.0 backports-abc==0.4 backports.ssl-match-hostname==3.5.0.1 certifi==2015.11.20.1 cycler==0.9.0 decorator==4.0.6 functools32==3.2.3.post2 gnureadline==6.3.3 ipykernel==4.2.2 ipython==4.0.3 ipython-genutils==0.1.0 ipywidgets==4.1.1 Jinja2==2.8 jsonschema==2.5.1 jupyter==1.0.0 jupyter-client==4.1.1 jupyter-console==4.1.0 jupyter-core==4.0.6 MarkupSafe==0.23 matplotlib==1.5.1 mistune==0.7.1 nbconvert==4.1.0 nbformat==4.0.1 notebook==4.1.0 numpy==1.10.4 path.py==8.1.2 pexpect==4.0.1 pickleshare==0.6 ptyprocess==0.5 Pygments==2.1 pyparsing==2.0.7 python-dateutil==2.4.2 pytz==2015.7 pyzmq==15.2.0 qtconsole==4.1.1 simplegeneric==0.8.1 singledispatch==3.4.0.3 six==1.10.0 tensorflow==0.5.0 terminado==0.6 tornado==4.3 traitlets==4.1.0 wheel==0.24.0