なんだかんだと休み休みも1ヶ月、悩みに悩んだのでメモ。

WooCommerceに日本対応のWooCommerce for Japanを入れている方は多いはず。
このプラグインを入れると、購入者のお名前も「名姓」ではなく「姓名」としてくれます。

しかし、WoocommerceにAmazon Payを導入してみると、「名姓」で出力されてしまうことが判明。
他がきちんと「姓名」で表示されるのに、受注管理画面で異彩を放ってしまうことになりますし、受注管理される方も「どうしてもということではないのですが…」と困り顔。

修正してみようと思ったのですが、ヘタなところにadd_action()するなどすると、何度も姓と名が入れ替わってしまうことになるので、支払いと支払完了画面のどちらかでフックができないかということ。
紆余曲折の末、woocommerce_thankyouフックにupdate_post_meta()を使って、データベースの上書きを狙ったのですが、エラーになってしまい上書きできず。
最終的に下記でできました。

functions.phpに下記を追加します。

add_action( 'woocommerce_thankyou_amazon_payments_advanced', 'ar_woocommerce_thankyou_amazon_payments_advanced', 100, 1 );
function ar_woocommerce_thankyou_amazon_payments_advanced( $order_id ) {
    if ( ! $order_id ) return;
	$order = new WC_Order($order_id);

	$temp_billing_lastname = $order->get_billing_first_name();
	$temp_billing_firstname = $order->get_billing_last_name();

	$order->set_billing_last_name($temp_billing_lastname);
	$order->set_billing_first_name($temp_billing_firstname);

	$temp_shipping_lastname = $order->get_shipping_first_name();
	$temp_shipping_firstname = $order->get_shipping_last_name();

	$order->set_shipping_last_name($temp_shipping_lastname);
	$order->set_shipping_first_name($temp_shipping_firstname);

	$order->save();
}

setしただけでは$order内にchangesという要素が増えるだけで保存はされませんでした。
save()をすることで保存されました。
CRUDを初めて使用したのですが、save()のことを知っていればそんなに難しくなかった…わけです。

あーーーー、すっきり!!

他のWooCommerceのカスタマイズネタはこちら

WooCommerceのカスタマイズに困ったら

途中まで作成したけれどうまくいかない。
そんな場合でも引き継いで対応いたします。お気軽にご相談ください。

プロフィール

荒岩 理津子
荒岩 理津子株式会社アールジャパン 代表取締役
株式会社東芝にてソフトウェア開発11年、サスペンションメーカーの広報6年、国立大学情報システムセンター非常勤職員、個人事業主を経て、2016年9月に株式会社アールジャパンとして法人化。WordPressに特化したWEBシステムの開発に携わる。Microsoft Visual Basic®のプログラミングに関する著書が9冊、そのうち一部は国立図書館に寄贈されている。色彩検定1級、Shoplifyパートナー。趣味は手芸一般。編み物歴、洋裁歴は四半世紀以上。神奈川県中小企業家同友会 広報委員会副委員長・編集長。