WooCommerce 請求書・納品書の印刷4
by takeoy · 2017年10月24日
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を利用してみましたが、何となく「こうやって使うのか・・・」ということが分かりました
最近のコメント