WooCommerce 請求書・納品書の印刷4

WooCommerce PDF Invoices & Packing Slips

を使ってみることにしました

前回、請求書納品明細書のカスタマイズを子テーマにコピーした

  • invoice.php
  • packing-slip.php

で行うことを書きました。 ⇒ コチラ

パーツの配置とかは、ファイルを編集すればできますが、請求先とか配送先の住所の並びとかはメソッドを呼び出しているだけなので、どうやってカスタマイズするのか。。。。?


プラグインのソースを追っかけていくと、先日学んだ フック(Hook)が利用できそうなことが分かりました。

plugins/woocommerce-pdf-invoices-packing-slips/includes/documents/abstract-wcpdf-order-document-methods.php

apply_filters として、wpo_wcpdf_billing_address と wpo_wcpdf_shipping_address

が定義されていたので、そちらを利用するために  functions.php にフックを書くのですが、

直接、functions.php を編集するのではなくて

Code Snippets

というプラグインを使って、そちらにコードを登録して 有効(Activate)にします

機能別に処理を登録して、簡単に有効・無効の制御ができるので、ある意味便利かな~と思います

コードの参考例


add_filter( 'wpo_wcpdf_billing_address', function ( $address, $obj ) {
$post = $obj->order->get_billing_postcode();
if ( empty($post) ) { return $address; }
$address = "〒".$post."<BR>";
$address .= state_prefecture ( $obj->order->get_billing_state() );
$address .= $obj->order->get_billing_city();
$address .= $obj->order->get_billing_address_2()."<BR>";
$address .= $obj->order->get_billing_address_1()."<BR>";
$address .= $obj->order->get_billing_company()."<BR>";
$lname = $obj->order->get_billing_last_name();
$fname = $obj->order->get_billing_first_name();
if(strpos($fname, $lname) === false){
$address .= $lname." ";
}
$address .= $fname." 様<BR>";
return $address;
}, 10, 2
);
add_filter( 'wpo_wcpdf_shipping_address', function ( $address, $obj ) {
$post = $obj->order->get_shipping_postcode();
以下、billing の内容と同等。。。

ここで、あれっとなるのは、

$address .= state_prefecture ( $obj->order->get_billing_state() );

if(strpos($fname, $lname) === false){
$address .= $lname." ";
}

ですよね

stateは、都道府県のコードで 例えば東京だと JP13 という値が返ってくるだけなので

そのまま出力すると JP13と 表示されてしまいます

やむなく、state_prefecture という function を同じSnippet内に定義して、そこで実際の名前に変換しました

こんな感じ

function state_prefecture ($state) {
$pref['JP'] = array($pref['JP'] = array(
'JP01' => __( 'Hokkaido', 'woocommerce' ),
'JP02' => __( 'Aomori', 'woocommerce' ),
  ( 省略 )
'JP47' => __( 'Okinawa', 'woocommerce' ),
);
$prefecture = $pref['JP'][$state];
return $prefecture;
}
元々、WooCommerce内にある JP.php を利用してみました

/wp-content/plugins/woocommerce/i18n/states/JP.php

2つ目のコードは  名前(first name)に 姓 が含まれていたら、last name を表示しない。。。。という小細工です

バグなのか 請求先と出荷先がある(特定の条件のときだけ)と、名前に 姓が入ってしまうのです。。。。(>_<) 

まぁこんな感じで、いろいろ手を入れていくと何となく和風の 請求書・納品明細書になってきますね (;^ω^)

はじめてHookを利用してみましたが、何となく「こうやって使うのか・・・」ということが分かりました







おすすめ