PC不具合日記

PCの不具合やウェブ制作の備忘録。多少人よりパソコンが詳しいため、周囲の人からしょっちゅう不具合の問合せを受けます。試行錯誤した結果を載せただけです。個人的な備忘録なので間違ったことを書いているかもしれません。

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

カテゴリ:WordPress,制作トラブル日記

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掲載

Twitterのプロフィール画像を設定できない

カテゴリ:不具合日記

【環境】
OS: Windows7 Professional SP1
ブラウザ:Chrome

【症状】
Twitterのプロフィール画像を設定しようとしても、
写真をアップロード出来ない

PCからブラウザでTwitterを開き、「プロフィールの編集」をクリックして
「プロフィール画像を変更」をクリック
「写真をアップロード」をクリックしてアップロードする写真を選択するが、
写真が表示されず、「適用」ボタンがクリック出来ない

【対処】
セキュリティソフトのESET Smart Secutiryのファイアウォールを解除してみたらアップロードできた。

タスクバーの「ESET Smart Secutiry」のアイコンをクリックし、
「ファイアウォールを一時的に無効にする」をクリック。
「10分間」等適当なものを選択し、Twitterで画像をアップロードした。

2016.03.28掲載

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

カテゴリ:WordPress,備忘録

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

2016.03.25掲載

FirefoxでMovable Typeのtextareaに横スクロールが入る

カテゴリ:制作トラブル日記

【環境】
ブラウザ:Firefox38.05
OS:Windows7
CMS:Movable Type6.1

【症状】

記事の投稿画面がフォーマット「なし」の状態にすると、
文字列が折り返されず、横スクロールが入る。

【対処】
小粋空間さんの「EntryTextareaBraker」プラグインを導入

小粋空間さんによると、Firefox36以降のバグのようです。


2015.12.21掲載

PowerCMSのCopy2Publicプラグインを最新バージョンで動かす

カテゴリ:備忘録

【症状】
Movable Typeベースのプラグインセット、PowerCMS3.1に元々ついていたopy2Publicプラグイン。
PowerCMSを4にアップグレードしたところ、「公開サーバ転送」で対象をすべて選択するチェックボックスにチェックを入れても、無反応になった。

【環境】
PowerCMS4.12
Movable Type6.12
ブラウザ:Chromeで確認

【対処】
/plugins/Copy2Public/tmpl/cp2pub_dialog2.tmpl を修正

attrがcheckedであるかをtrueで条件分岐しているので、
trueではなく'checked'に変更

15行目
修正前 if (status == true) {
修正後 if (status == 'checked') {

25行目
修正前 if (jQuery(this).attr('checked') == true) {
修正後 if (jQuery(this).attr('checked') == 'checked') {


2015.12.21掲載

DELLのPC起動時にバッテリーのエラーメッセージが表示される

カテゴリ:不具合日記

【環境】
OS: Windows7
機種: Dell Latitude 3540

【症状】
PC起動時に、黒画面で「this battery is temporarily disabeled」というメッセージが表示される。
F1を押せば起動でいるが、毎回表示されてうっとおしい。

【対処】
Dellのサポートサイトから最新BIOSをインストールしたら直った。
不具合の出ていたPCのBIOSはバージョンA06で、A10をインストール。

■手順
(1) DELLのサポートサイトにアクセス
(2) PC背面に貼ってあるシールに記載されている「サービスタグ」をサポートサイトに入力。(他の方法でも可)
(3) 左メニューから「ドライバおよびダウンロード」をクリック。
(4) 「BIOS」をクリックして、「Dell Latitude 3540 System BIOS」の「ファイルのダウンロード」をクリックしてファイルを保存。
(5) ダウンロードされたファイルを実行。
他のアプリケーションはすべて閉じておく
(6) メッセージに従って進め、再起動して完了。

2015.12.08掲載

Windows7のバックアップでエラーが出て設定を保存できない

カテゴリ:不具合日記

【環境】
OS:Windows7 Professional SP1 64bit

【症状】
Windows標準のバックアップツールで設定を変更しようとすると、
エラーが出て保存できない。

エラー内容は
「別のトランザクションで使用するために予約されている名前を関数で使用しようとしました(0x80071A90)」

error.jpg

【対処】
セキュリティソフトのESETを使用していると、上記のエラーが出る模様。

(参考)Windows バックアップ設定をおこなう際にエラー(0x80071A90)が発生する

このページに記載の手順に従ってリアルタイム保護を無効にしてからバックアップの設定を変更。

【リアルタイムファイルシステム保護を無効にする手順】
ESET製品の基本画面を開きます。
[設定]をクリックします。
コンピュータのリアルタイムファイルシステム保護の「有効」をクリックします。
間隔のプルダウンより、[再起動まで無効にする]を選択します。
[OK]ボタンをクリックして、設定ウインドウを閉じます。
※ バックアップ設定完了後、上記手順で無効にした設定を有効に戻して下さい。

2015.11.10掲載

ECCUBE2.13でログイン時にlogin_error等の文字だけ表示される

カテゴリ:制作トラブル日記

ECCUBE2.13で会員ログインしようとすると、
真っ白な画面に以下のメッセージが表示される。

{"login_error":"\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3082\u3057\u304f\u306f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002"}

以前の記事で同様の症状が出て、直せたと思っていたのは勘違いだった模様。

Google検索すると、
パラメータ設定の「DEVICE_TYPE_SMARTPHONE」がPC用の「DEVICE_TYPE_PC」と同一の場合にこのようになる。PCと違う値にすればOKという記載がありました。

今回のサイトでは、レスポンシブを採用したので、PCとスマホ同一ソースを出す必要があるため、DEVICE_TYPE_SMARTPHONEをPCと同じ数値にしていました。

異なる数値にはできないので、
端末の振り分け部分を修正することにしました。

data/class/SC_Display.phpの
端末の判定部分をコメントアウトし、すべてPCとして扱うよう変更。
(ガラケーサイトはつくってないのでついでにコメントアウト)

public static function detectDevice($reset = FALSE)
{
if (is_null(SC_Display_Ex::$device) || $reset) {
$nu = new Net_UserAgent_Mobile();
$su = new SC_SmartphoneUserAgent_Ex();
// if ($nu->isMobile()) {
// SC_Display_Ex::$device = DEVICE_TYPE_MOBILE;
// } elseif ($su->isSmartphone()) {
// SC_Display_Ex::$device = DEVICE_TYPE_SMARTPHONE;
// } else {
SC_Display_Ex::$device = DEVICE_TYPE_PC;
// }
}

return SC_Display_Ex::$device;
}


data/cache内のファイルを削除して、
再度アクセスし、正常な表示になっていることを確認しました。

以前の記事で直せたと思ったのは、どうもキャッシュの更新のタイミングで直ったように見えただけじゃないかと思っています。


2015.12.08追記
同じ状態になりました。
よく分かりませんが直ってなかったようです。

data/class/pages/frontparts/LC_Page_FrontParts_LoginCheck.phpの
SC_Display_Ex::detectDevice() === DEVICE_TYPE_SMARTPHONE
部分をすべてはずして、全てPC扱いに変更したら直りました。

2015.10.27掲載

ECCUBE2.13でログイン時に画面遷移しない

カテゴリ:制作トラブル日記

ECCUBE2.13でユーザがログインしようとすると、
{"success":"\/mypage\/login.php"}
とだけ画面に表示されて、正常に画面遷移しない。

Google検索したらスマホのみで同様の事例があった。
tplをデフォルトのテンプレートに変えても直らず、
templates_cの中を削除しても変わらず。

classファイルとか一部いじってたので、
こちらもデフォルトに戻しても直らず。

/data/cache内のファイルを全削除したら直った。

2015.09.08掲載

突然プリンタが消えて印刷できなくなった

カテゴリ:不具合日記

【環境】
OS:Windows7 Home edition

【症状】
いつも使っていたプリンタが消えて印刷できなくなった。

プリンタを追加しようとすると「プリンターの追加を開けません。ローカルの印刷スプーラー サービスが実行されていません。」とのエラーメッセージが表示される。

【対処】
スタート→「プログラムとファイルの検索」欄に「サービス」と入力して、「サービス」を起動。

一覧から「Print Spooler」を確認すると、「状態」が空欄になっている。

ダブルクリックしてプロパティを開き、「サービスの開始」欄の「開始」ボタンをクリックする。

すると「Print Spooler のサービス開始時、エラー1068 依存関係サービス又はグループを起動できませんでした」とのエラーが表示される。

Googleで検索したところ、以下URLに解決方法が複数掲載されていた。
(Solved) Print Spooler Error 1068 - The Dependency Service Can't Start

ただ、システムの復元をやったほうがてっとり早いっぽいです。
Windows 7でシステムを復元する方法(121ware.com)

2015.06.24掲載