Simple WordPress Membershipでフォームをカスタマイズする時に通知だけ表示する

Simple WordPress Membershipという会員機能を手軽に実装できるプラグインを活用した開発をおこなっています。
フォームのマークアップを変えたいのですが、フックするのは何かと面倒そうなのでテンプレート階層でカスタムしたフォームのテンプレートを作成しているのですがお知らせ・通知が表示されなく困まったので、とりあえず通知を出せる方法です。

Shortcodes Summary List for the Simple Membership Plugin – Membership Plugin

上記の公式ドキュメントからカスタマイズしたいフォームのショートコードを探します。
サンプルとしてPassword Reset Page Shortcodeの箇所にある[swpm_profile_form]を使います。

<?php do_shortcode( '[swpm_profile_form]' );?>

このようにフォームのカスタマイズした冒頭でショートコードをechoせずに実行します。
Simple WordPress Membershipの場合は、

WooCommerceでStripe決済を導入する時のエラーの解決方法

WooCommerceでStripe決済を導入しようとプラグインをいれて設定してみたのですが『Sorry, we are unable to process your payment at this time. Please retry later.』と表示されてしまい決済が進みません。

今回は実際にエラーを解決した手順と、WooCommerceを利用してECサイトを作る時のエラーの解決方法について書いていきます。

この記事でのエラー解決方法は、テストモードを有効可しているか本番用のAPIキーを取得して登録している状態が前提となります。

エラーの解決手順

まずはエラーの原因を特定する必要があります。利用しているテーマやWooCommerce以外の他のプラグインに原因がある場合があるので、まずはWooCommerceとStripe以外のプラグインを無効化してテーマをWooCommerceが推奨するデフォルトテーマであるStorefrontに変更します。
細かい詳細は下記のとおりです。

プラグインが競合 (悪さ) しているか調べる

  1. プラグインをすべて無効化する
  2. WooCommerceとStripeのプラグインを有効可する
  3. 商品を購入する
  4. まだエラーがでる場合はプラグインの競合はないので、テーマのチェックに進む

テーマが競合 (悪さ) しているか調べる

  1. テーマをWooCommerceが推奨するStorefrontに変更する
  2. WooCommerceとStripeのプラグインだけを有効可する
  3. 商品を購入する
  4. まだエラーがでる場合はプラグインの競合はないので、エラーログのチェックにすすむ

エラーログの確認

  1. WooCommerce > 購入手続き > Stripe のページに移動
  2. 『デバッグメッセージのログを取得』にチェックをいれて設定を保存する
  3. 商品を購入する
  4. WooCommerce > ステータス のページの『ログ』タブを選択する
  5. woocommerce-gateway-stripe-xxxx.log (2018年xx月xx日 @ xx:xx )を選択し、表示をクリック
  6. 一番下にある最新のログを確認する
  7. ログのmessageの内容を調べてみる

上記の流れで大抵のことは解決されると思います。
プラグインとテーマが競合していないかどうかを調べたあとは、ログの取得をしてメッセージを知らべます。
今回は下記のようにエラーログが取得できました。

====End Log====


04-25-2018 @ 20:20:42 - 
====Stripe Version: 4.1.2====
====Start Log====
Error: stdClass Object
(
    [error] =&gt; stdClass Object
        (
            [message] =&gt; The statement descriptor must contain at least one alphabetic character.
            [param] =&gt; statement_descriptor
            [type] =&gt; invalid_request_error
        )

)

====End Log====

問題の部分は “[message] =>” に記載されている「The statement descriptor must contain at least one alphabetic character.」です。
これはStripeのステートメント記述子をアルファベットにしろということです。Stripeの設定画面から該当の箇所を見ると日本語で入力されていたため、こちらをアルファベットに変更したところ無事決済ができました。

WordPressやWooCommerceや決済系などの公式プラグインはユーザも多いので「プラグインのせいで動かない」という可能性は極めて少ないと思います。
多くの場合は、自分の設定ミスやWordPressの公式ディレクトリに掲載されていない質の悪いプラグインやテーマを使っているところにあるはず。
そんな時は、すべてのプラグインを無効化しテーマをデフォルトのtwentyfifteenなどのに変更してエラーログを見れるようにしてみましょう。

Behatを使ってWordPressのテストをする

先日、WordCamp Bangkok 2018のコントリビュータデイでWP-CLIチームに参加しました。
その時に継続的なテストをおこなえるように教えてもらったのでメモです。

Behatを使ってWordPressの構成をテストする

WordCamp Bangkok 2018コントリビューターディ『WP-CLI』チームに参加しました

WordCamp Bangkok 2018のコントリビューターデイでWP-CLIチームに参加しました。
コントリビューターデイのチームリーダーはTakayuki Miyauchiさんが優しく教えてくれました。

準備とオリエンテーション

GitHubでチケット管理がされているようで、実際にはそちらを見てコントリビュートにとりかかるのですが、その前の準備としてWP-CLIを最も新しいnightly版に下記のコマンドでアップデートします。

wp cli update --nightly

また、下記のコマンドでWP-CLIのメインコマンドやサブコマンドを確認することができます。

wp

その後はWordPressのコアのチケットにもある“Good First Issues”という初心者でもできるチケットが判別できるようになっているので、そちらの一覧を見てとりかかれそうなものを探していきます。

WP-CLI – GitHub : Good First Issues

WooCommerceのcart.phpからボタンを押してwp_mailでメールを送信する

jQueryを利用してajaxで非同期通信をおこないメールの送信ボタンの表示とwp_mailでメールを送信する処理をする。

cart.php

<script>
	var mail_path = "<?php echo get_stylesheet_directory_uri()?>/path/estimate.php"
	console.log(mail_path);
	jQuery(function () {
		jQuery('#estimate_mail-button').toggle(
			function () {
				jQuery.ajax({
					url: mail_path,
					data: {
						item_name: '商品の名前',
						item_price: '2000',
						item_quantity: '10'
					},
					success: function (data) {
						jQuery('#estimate_mail-ajax').html(data);
						jQuery('#estimate_mail-textStatus').text('送信成功');
					},
					error: function (data) {
						jQuery('#estimate_mail-textStatus').text('送信失敗');
					}
				});
			},
			function () {
				jQuery('#estimate_mail-ajax').html('');
				jQuery('#estimate_mail-textStatus').text('');
			}
		);
	});
</script>


<div id="estimate_mail">
	<p>
		<button id="estimate_mail-button">見積もりを送信する</button>
		<span id="estimate_mail-textStatus"></span>
	</p>
</div>

estimate.php

<?php
function estimate() {
	require_once("../../../../wp-load.php");

	wp_mail( 'me@example.com', 'The subject', 'The content');
}
estimate();



参考URL