なんだかんだと休み休みも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のカスタマイズに困ったら
途中まで作成したけれどうまくいかない。
そんな場合でも引き継いで対応いたします。お気軽にご相談ください。






