WordPress

PaidMembershipsPROで有料会員制サイトを構築したときの注意点

WordPress4.5.3
PaidMembershipsPRO1.8.9

WordPressで有料の会員制サイトを構築することになり、PaidMembershipsPROを使いました。いろいろ苦労したので、メモを残しておきます。

会員制サイト構築のプラグインを比較しているサイトに載っていたので採用しました。
比較されてる方のほとんどは、実際に使わずに記事を書いてるようなので要注意です。

結果としては、アメリカ向けのサイトはともかく、日本向けに日本語でサイトを作るつもりの方はPHPが触れないと使い物にはなりません。
そうはいっても、かなりの高機能なのが楽して構築できることも確かです。


構築したのは、月次課金の有料会員制サイトです。
PaidMembershipsPRO(PMPro)はStripeに対応しており、WordPressとStripeの管理画面をちょこっと触るだけで簡単にStripeの決済を利用することができます。
PayPalのようにユーザがアカウント登録する必要がなく、Wordpress側のサイトで全て完結できるので、非常に良いです。

Stripeの決済金額が100倍になる

決済テストしたところ、会費の100倍の金額で決済されることがわかりました。
StripeのAPIでは、決済金額に小数点の通貨を含む場合、100倍にして金額を送信するらしく、
PMProからStripeに送信する際に、金額を100倍にする設定になっていました。

米ドルや英ポンド等、小数を含む通貨はそれでいいのですが、
日本円は小数が入っていないので、例えば1,000円で決済すると、100,000円として決済されてしまい、このままでは大問題です。

PMPRoでは決済する通貨をセレクトボックスで簡単に選択できるようになっているので、
金額のようなデリケートな部分は当然ちゃんとなってるだろうと思っていたら、
まったくちゃんとしてませんでした・・。

/class/gateways/class.pmprogateway_stripe.phpの
"amount" => $amount * 100
の*100を削除しました(2箇所)

なかなか情報が見つからなくて苦労しました。

日本語に対応していない

PMProは日本語に未対応ですので、poファイルを自作する必要があります。
Poeditで作成しました。

自動送信メールを日本語にし、ヘッダ・フッタを設定する

会員登録や退会時などの自動返信メールは、/mail/*.htmlにひな形が入っていて編集できるようになっています。
ここは編集したpoファイルから翻訳されないので、htmlに書かれている内容を日本語に翻訳する必要があります。
メールの件名はpoファイルから翻訳されます。

メールのヘッダフッタの問題

メールのヘッダ・フッタは、WordPressのテンプレートディレクトリに
email_header.html
email_footer.html
というファイルを保存してやれば、読み込んでくれます。

ただし、ISOでエンコードしておかないと日本語は文字化けします。
メール本文の雛形はUTF-8でエンコードしないと文字化けするので間違えそうです。

私は、ヘッダに「◯◯様」と表記したかったのですが、
ヘッダ・フッタに入れた差し込みコードが働かないので、メール本文の差し込みコードを処理する箇所でヘッダ・フッタを読み込むように変更しました。

/includes/email.php



会員登録時に日付型を項目を追加したらエラーになる

PMPRoではpmpro-register-helperというプラグインを入れると、会員登録時の項目を増やすことができます。(増やすときはfunctions.phpに書きます)

私はdate型の項目を追加したのですが、
そうすると会員登録時にエラーが出るようになりました。

フォーム上で日付の項目は年月日が3つの入力欄で表示され、
field-name[y]、field-name[m]といった形式で配列になってるんですが、
受け取る際はstringで受け取るようになっていたのがエラーの原因でした。

/pmpro-register-helper/class.field.php


日付型の項目の表示順を「月日年」から「年月日」に変更

同じ箇所ですが、日付の入力欄が「月日年」の順に並んでおり、
しかも月は「JAN」「FEB」という英語の略称のセレクトボックスになってます。
なぜか日の方はテキスト入力。

これをすべてセレクトボックスにして、表示順を変更しました。

日付型の項目名を日本語にする

functions.phpで追加項目の設定をする際に、表示名の設定を別にすることができません。
dateという名前で設定すると、登録フォーム上もdateと表示されてしまいます。

これに関しては、jQueryで強引に変更しました。


会員登録時の名前の表示を「名姓」から「姓名」に変更する

これは直さないと気になりますね。
フォーム上の表記に加えて、メールにも出力される支払情報中の姓名(billing_name)も直さないといけませんでした。


会員登録時のカード決済のエラー文を日本語にする

登録フォームでカード番号や有効期限に不具合があった場合、Stripeから返ってきたエラーはJSのalertで表示されます。
jQueryで条件分岐して日本語の文章を出すようにしました。


カスタムフィールドの項目が会員設定に対応していない

管理画面上でカテゴリや投稿に会員設定をすれば、非会員には表示されないようにできるのですが、カスタムフィールドの項目は会員限定にしても見れてしまいました。

the_contents(); でそのままコンテンツを出力せずに、カスタムフィールドの項目を$contentにまとめて、その後以下のように書きました。

echo pmpro_membership_content_filter($content);

これで非会員の場合は、限定コンテンツが表示されず、非会員向けのメッセージが表示されます。

PMProの更新通知を無効にする

PMProは毎週のようにアップデートをしているようなので、
間違ってアップデートしないようにfunctions.phpで更新通知をしないようにしておきました。


他にもあったかもしれませんが、
今思い出せるのはこの程度です。

2016.07.29掲載

BizVektorのテンプレートのコピーライトを削除する

2016年3月現在
1) BizVektorのテンプレートファイルのplugins.phpを開く
2) 41行目以降をコメントアウトまたは削除

2016.03.25掲載

WordPressの画像の編集画面でプレビューが表示されない

【症状】
WordPressを導入しているサイトで、アップロードした画像をWordPress上から編集しようとすると、プレビュー画像が表示されない。

【環境】
WordPress: 4.1

【対処】
Googleで検索してもあまり情報はなかった。

まず「画像プレビュー部分はAjaxを使っているので、セキュリティソフトが原因では?」という書き込みがあったので、オフにしてみたが、効果なし。

WordPressの英語版のサポートサイトで、functions.phpの空白行の問題という書き込みがあったので、試したところ解決した。

具体的には
funcions.phpで、以下のようにPHPで書かれていない部分に空白行があったら削除する。

■変更前

■変更後


【参考】
"Edit Image" - image does not show up...
https://wordpress.org/support/topic/edit-image-image-does-not-show-up

2015.03.09掲載