Print Invoice & Delivery Notes for WooCommerceをインボイス対応させる
インボイス対応プラグインについて
WooCommerceの請求書作成プラグインで【PDF Invoice Japan for WooCommerce】は最初からインボイス対応しているため、特に問題がなければこちらの導入の方がシンプルで良いかもしれません。
今回カスタマイズするプラグイン
そんな中で、インボイス対応していないプラグインをカスタマイズして使えるようにしようというのが今回の内容です。
取り上げるのは【Print Invoice & Delivery Notes for WooCommerce】です。
こちらは請求書のほかに納品書・領収書のPDF発行が可能です。
UIも日本語対応で分かりやすく、プラグイン内のコードもカスタマイズしやすいように設計されています。
実際の案件で、納品書をインボイス対応しなければいけないケースに当たったため、今回は上記のプラグインをカスタマイズしていくことにしました。
WooCommerce設定内容と準備
今回はWooCommerceにて以下の設定でのケースをご紹介致します。
- WooCommerce設定の一般タブ「税金を有効化」にチェック
- WooCommerce設定の税タブ「税込み価格入力」を選択
- WooCommerce設定の税タブ「税の丸め計算」→なし
- WooCommerce設定の税タブ「追加の税金クラス」→「軽減税」を追加
- WooCommerce設定の税タブ「税金合計を表示」→「項目別」
また、今回は税率が違うものを一緒に商品として扱っていることを想定して、税率設定リンクから標準税率(10%)と軽減税率(8%)の設定をしておきます。
ここまで作業できたら、カスタマイズを進めていきます。
コードカスタマイズ
それではカスタマイズに移りましょう。
print-content.phpの編集
まず、以下のプラグインディレクトリ内のファイルをコピーします。
/wp-content/plugins/woocommerce-delivery-notes/templates/print-order/print-content.php
次に、使用しているテーマディレクトリの直下にwoocommerceディレクトリを作り、以下のようにphpファイルを格納すると、プラグインに更新があってもカスタマイズした内容が適用されます。
(phpファイルの最上部にもコメントでカスタマイズ方法が英語で案内されています)
/wp-content/themes/{現在のテーマディレクトリ}/woocommerce/print-order/print-content.php
コピーしたphpファイルを開いて、軽減税に該当した際は商品名の横に米印(※)を表示するカスタマイズをします。
まずはtbodyの開始タグのすぐ下の記述で
<?php if ( count( $order->get_items() ) > 0 ) : ?>
<?php foreach ( $order->get_items() as $item_id => $item ) : ?>
<?php $product = apply_filters( 'wcdn_order_item_product', $item->get_product(), $item );
// 追記:税区分取得
$tax_class = str_replace('%' ,'' , $item->get_tax_class());
$tax_class_name = hex2bin($tax_class);
// 追記ここまで
orderから商品データを取り出してforeachで回して処理している部分があるため、foreach内で$item->get_tax_class()を使って税金クラスを取得。
クラスの文字列が16進数で取得されてしまうため、まず区切り用の%をstr_replace()で取り除き、hex2bin()で使える文字列として変換する手順を踏むのがポイントです。
次に、商品名が載ってくる部分に文字列表示の処理を書き加えます。
product-nameクラスのtdタグ内にnameクラスが付いたspanがあります。
そのspanの閉じタグのすぐ上に軽減税クラスだったら記号を出力・そうでなければ何も出力しない三項演算子処理を書けばOK。
<span class="name">
<?php // 中略 ?>
<?= $tax_class_name === '軽減税' ? ' ※' : ''; // ここを追記 ?>
</span>
これで、もし軽減税クラスに該当する商品が注文にあった場合、商品名のすぐ右に※が表示されるようになります。
functions.phpの編集
続いて、プラグインが準備してくれているアクションフックのwcdn_after_itemsを使って、税率毎に対象となる税抜金額・消費税額・消費税額合計を表示させる処理を追加していきましょう。
コードはこちら。
function delivery_notes_for_japanese_invoice( $order ) {
// 軽減税率用
$light_tax = 0;
$light_total = 0;
// 標準税率用
$default_tax = 0;
$default_total = 0;
if ( count( $order->get_items() ) > 0 ) {
foreach ( $order->get_items() as $item ) {
// 消費税取得
$item_tax = $item->get_subtotal_tax();
// 価格取得
$item_price = $item->get_subtotal();
// 税区分取得
$tax_class = str_replace('%' ,'' , $item->get_tax_class());
$tax_class_name = hex2bin($tax_class);
if ( $tax_class_name === '軽減税' ) {
$light_tax += $item_tax;
$light_total += $item_price;
} else {
$default_tax += $item_tax;
$default_total += $item_price;
}
}
}
// 税額合計
$total_tax = $order->get_total_tax();
// 表示用
$html = '<div style="display: grid; grid-template-columns: repeat(2, 1fr); grid-template-rows: auto;">';
$html .= '<div style="display: flex; flex-direction: column; gap: 8px; margin-top: 8px;">';
$html .= '<p style="margin: 0;">10%対象: ¥' . esc_html(number_format($default_total)) . '</p>';
$html .= '<p style="margin: 0;">8%対象: ¥' . esc_html(number_format($light_total)) . '</p>';
$html .= '</div>';
$html .= '<div style="display: flex; flex-direction: column; gap: 8px; margin-top: 8px;">';
$html .= '<p style="margin: 0;">10%消費税合計: ¥' . esc_html(number_format($default_tax)) . '</p>';
$html .= '<p style="margin: 0;">8%消費税合計: ¥' . esc_html(number_format($light_tax)) . '</p>';
$html .= '<p style="margin: 0;">消費税合計: ¥' . esc_html(number_format($total_tax)) . '</p>';
$html .= '</div></div>';
echo $html;
}
add_action( 'wcdn_after_items', 'delivery_notes_for_japanese_invoice' );
消費税額合計はorderからget_total_tax()を使って取得すると良いと思います。
ショップ住所と挨拶文に必要事項テキストを追加
最後に、WordPressのダッシュボードでWooCommerce設定の印刷タブにある
「ショップ住所」の入力欄に
適格請求書発行事業者の氏名または名称と登録番号
「挨拶文」の入力欄に
※ 軽減税率対象品目
この文字列を追加・設定を保存して作業は完了です。
サンプル
上記の作業が終われば、購入商品リスト付近はこんな感じにPDF出力がなされます。
商品名横に※が表示され、しっかり税率ごとに必要な情報が明記されるようになります。
最後に
いかがでしたでしょうか?
通常であれば請求書でこの対応ができるプラグインであれば問題ありませんが、納品書も必要な記載事項を網羅していれば書類として認められます。
参考:freee会計さん関連ページ
以上、WooCommerceでのECサイト構築の際にお役立て頂けましたら幸いです。
Discussion