Woocommerceのメールに追跡番号(配送番号)を挿入するには

プラグインは不要です。カスタムフィールド+phpコードで簡単に実現できます。

(3月9日)
追跡番号の入力はいちいち数字を打たずに、ヤマトの場合は”B2クラウド”などを使ってPDFで生成された送り状に記載された番号をコピペしています。

でも単純にカスタムフィールドにペーストすると全角文字になったり、代引の送り状の場合は見えない余計な文字が前後に付いてきたりするので加工が必要です。

それらを加味したコードに書き直しました。このページの最後にあります。
わざわざ半角数字に書き直さなくても全角の数字とハイフンのままでもOKです。

クリックポストの場合はラベル生成時にURLに書かれた数字をコピーすれば良いので、ヤマトのような問題は生じないです。

(9月30日)
ヤマトさんから荷物の問い合わせ用のURLが変更になるという通知がありました。

従来) http://jizen.kuronekoyamato.co.jp/jizen/servlet/crjz.b.NQ0010?id=XXXXXXXXXXXX


新URL ) https://member.kms.kuronekoyamato.co.jp/parcel/detail?pno=XXXXXXXXXXXX


新しいURLは既に運用可能です。ヤマトさんは番号の末尾に空白があったり、番号をハイフンで区切ったりするのはNGみたいですね。下記のコードに修正を加えました。

(9月27日)
まだ8.2はリリース前ですが、8.2-beta1では不具合が解消されていました。
8.2ではHPOSが標準です。



8.0.1で、管理画面からカスタムフィールドを保存できない状態です。注文全体を更新すると消えてしまいます。バグでしょう。
投稿テーブルと注文テーブルの同期をoffにすれば保存できて期待する動作をしてくれます。


今まで、あるプラグインを使ってヤマトや日本郵便などの追跡番号(お問い合わせ番号)をメールに挿入していたのですが、WooCommerce8.0で使えないことが判明しました。

別のプラグインをいくつかテストしてみたのですが、どれもまともに使えない状態です。

やりたいことは、番号とリンク先を挿入するだけという単純なことです。

そこで、カスタムフィールドを利用することにしました。

カスタムフィールドに ヤマト運輸の場合は「名前」に”yamato”、クリックポスト(日本郵便)の場合は「名前」に”jp”を入力し、「値」として追跡番号をセットします。

下記のコードを(子)テーマのfunctions.phpに追加すると、メールの”メタ情報”の位置に挿入されます。

add_action( 'woocommerce_email_order_details', 'my_tracking_number');
function my_tracking_number($order) {
	
	 if ($yamato_num =$order->get_meta('yamato') ) : 
	$yamato_num =mb_convert_kana($yamato_num,"ans");
	$yamato_num  = trim(str_replace('-', '', $yamato_num));
	$yamato_num = preg_replace("/\p{C}/u", "", $yamato_num);
	
	
	echo '<h2> 配送情報 </h2>';
	echo  'ヤマト運輸  :' ;
	echo '<a href="http://jizen.kuronekoyamato.co.jp/jizen/servlet/crjz.b.NQ0010?id=' . $yamato_num . ' " >' . $yamato_num . '</a>';
    endif; 
	if ($jp_num =$order->get_meta('jp') ) : 
	echo '<h2> 配送情報 </h2>';
	echo  'クリックポスト :' ;
	echo '<a href="https://trackings.post.japanpost.jp/services/srv/search/direct?searchKind=S002&locale=ja&reqCodeNo1=' 
	. $jp_num . '">' . $jp_num . '</a>';
	endif; 
	
}

「えっ?佐川さんはどうするの?」「…….自分で調べてね!」「そこをなんとか」「佐川さんとは付き合いがないので何か変更があってもフォローできないんですよ」