BillVektorで請求書の請求番号を自動入力するカスタマイズ

BillVektorサイトを表示したMacbook ProWordPress

どのくらいの方が使用されているのか不明ですが、個人事業主にとってこのWordPressテーマはかなり便利だと思います。ですが、請求書の番号を手打ちで入力しなければなりません。これをわかりやすく自動化してみました。

記事固有の番号を使う

請求番号を振る際、どうやって割り当てるかが一番悩みました。

投稿日などを請求書番号に適用すると、もし顧客から「申し訳ないが請求書の日付を早めて(遅らせて)ほしい」など依頼がきた場合、一度登録した請求書番号が変化することになってしまいます。

年末年始など繁忙期には、そういった日付の変更依頼が起こる可能性も高く、どうすれば良いか悩みました。

記事IDは固定されている

WordPressの投稿記事ですが、記事IDという個別の番号が割り振られています。この記事IDは投稿日を過去に変えようが、予約投稿にしようが変化しません。

この記事IDを使って請求書番号を作成すれば、そういった日付の変更があった場合にも請求書番号自体は変化しませんからOKかと。

このBillVektorの構造は私の知識では完全に理解する事が出来ませんでしたので、ここで紹介する方法でカスタマイズすることは自己責任でお願いします。

テンプレートを調べる

まずは請求書発行画面で、どのテンプレートが使われているのかを調べると

このようにsingle.phpが使われていますので通常の投稿ページを使って請求書ページが作られているのがわかります。

ではsingle.phpはどのような記述なのでしょうか

<?php
$doc_change = false;
add_filter( 'bill-vektor-doc-change', $doc_change );
if ( ! $doc_change ) {
	if ( get_post_type() == 'post' ) {
		get_template_part( 'template-parts/doc/frame-bill' );
	} elseif ( get_post_type() == 'estimate' ) {
		get_template_part( 'template-parts/doc/frame-estimate' );
	} elseif ( get_post_type() == 'client' ) {
		get_template_part( 'template-parts/doc/frame-client' );
	}
}
do_action( 'bill-vektor-doc-frame' );
?>
<?php endwhile; ?>
<?php } ?>

これはsingle.phpの15行目〜30行目あたりに書かれていますが、請求書は投稿、見積もり(estimate)と顧客(client)はカスタム投稿タイプが選択されています。

if ( get_post_type() == 'post' ) {
		get_template_part( 'template-parts/doc/frame-bill' );

この記述から、請求書を編集する場合は'template-parts/doc/frame-bill'を編集する必要があるという事です。

frame-bill.phpを編集する

実はBillVektorのframe-bill.phpは一つではありません。

ですから、前述のsingle.phpに書かれている通り該当するディレクトリであるtemplate-parts内のdoc内にあるframe-bill.phpを編集します。

カスタマイズ前の状態

カスタマイズ前のframe-bill.phpの請求番号周辺のコードは以下

<table class="bill-info-table">
<tr>
<th>請求番号</th>
<td>
<?php echo esc_html( $post->bill_id ); ?>
</td>
</tr>
<tr>
<th>発行日</th>
<td><?php the_date(); ?></td>
</tr>

この記述だと、請求番号の欄は上から3行目の

<tr>
<th>請求番号</th>
<td>
<?php echo esc_html( $post->bill_id ); ?>
</td>
</tr>

この欄ですね。ここでechoされているのは、請求書作成画面の

この請求番号の入力欄が出力されています。

ここに固有の番号を表示するようにカスタマイズします。

自動入力させる記述

これは思いついた良さげな請求番号が数パターンありました。好みのスタイルがあるでしょうから、お好きなものを選ばれると良いかと思います。

この例は、全て「記事IDが39」の記事で試した表示例です。

請求番号=記事ID

最初に記事IDのみを請求番号にする方法です。

この場合、記事数(発行請求書数)が少ない場合は数字の桁が2桁、3桁など短くなります。

請求番号の部分に記事IDを持ってきて表示させます

<tr>
<th>請求番号</th>
<td>
<?php 
$pgid = get_the_ID(); echo $pgid;	
// echo esc_html( $post->bill_id );
?>
</td>
</tr>

記事IDを$pgidとして、それをechoしています。

元々の手入力の部分はコメントにして表示しないようにしています。

すると

このように39という記事IDのみが請求番号として表示されます。

請求番号=桁数指定した記事ID

請求番号が2桁というのは、どこか恥ずかしい、桁が少なすぎるという場合は以下を記述します。

<tr>
<th>請求番号</th>
<td>
<?php 
$pgid = get_the_ID(); echo sprintf("%05d", $pgid);	
// echo esc_html( $post->bill_id );
?>
</td>
</tr>

ここでは「記事IDを5桁にして表示する」としています。

すると

このように5桁表示になります。数字が寂しいと言っても頭につくのがゼロですからイメージはあまり変わらないかも知れませんね。

桁数の変更

勘の良い方、phpをご存知の方は既にお気づきかも知れませんが、桁数を決めているのは

"%05d"

この”5”が桁数です。これを7に変えると

このように7桁表示になります。

請求番号=年+記事ID

請求番号の頭にゼロが並びすぎるのもちょっと・・・って方は、頭に「年の下二桁の数字」を入れると良いかも知れません。

<tr>
<th>請求番号</th>
<td>
<?php 
echo get_the_date('y'); 
$pgid = get_the_ID(); echo sprintf("%05d", $pgid);	
// echo esc_html( $post->bill_id );
?>
</td>
</tr>

記事が投稿された年の下二桁を頭に表示して、その後記事IDが5桁で表示されています。

ちょっと長いので、記事IDを4桁にすると

こちらの方がすっきりしていて良いですね。

請求番号=年+月+記事ID

先の年の次に、月の数字も入力して記事IDと繋いで請求番号を表示します。

<tr>
<th>請求番号</th>
<td>
<?php 
echo get_the_date('ym'); 
$pgid = get_the_ID(); echo sprintf("%05d", $pgid);	
// echo esc_html( $post->bill_id );
?>
</td>
</tr>

発行日が2020年12月ですからちょっと勘違いしやすいのですが、表示されているのは「20年の12月で、5桁にした記事ID」となります。

これはちょっと長すぎでしょうか。

請求番号=手入力+記事ID

全て自動で請求番号を作成せず、記事IDに手入力で任意の番号を追加する方法です。

担当者IDなどを決めて都度入力すると、誰が担当した請求書かわかるようになるので便利です。
ですが将来的に担当者別に請求書を表示させたりする事を想定すると、本来はタグを使って分けるべきかと思います。

<tr>
<th>請求番号</th>
<td>
<?php 
echo esc_html( $post->bill_id );
$pgid = get_the_ID(); echo $pgid;	
?>
</td>
</tr>

この記述で、請求書作成画面の手入力の欄が記事IDと連結します。例として「555」と手入力し

表示させてみると

これが一番請求番号っぽい?ですが、毎回手打ちするのは非常に面倒ですね。

記事ID+手入力

これは説明するまでもなく、先の記述の順番を変えるだけです。

<tr>
<th>請求番号</th>
<td>
<?php 
$pgid = get_the_ID(); echo $pgid;	
echo esc_html( $post->bill_id );
?>
</td>
</tr>

これは使い道が無いかも知れません。

請求番号=任意の固定された数字+記事ID

何か任意の数字を決めておいて、phpに出力させるだけですね。

<tr>
<th>請求番号</th>
<td>
<?php 
$pgid = get_the_ID(); echo ('1234' . $pgid); 
?>
</td>
</tr>

任意の数字と記事IDをドットで連結しています。

さらにその他のパターン

こういった組み合わせを使えば、請求番号の自動化はかなりのパターンで作成可能かと思います。

任意の数字プラス桁数を決めた記事IDなども簡単に作成可能です

注意点

これは親テーマを直接編集していますので、

テーマのアップデードで設定は上書きされてしまいます。

ここに注意が必要です。

子テーマで対応可能か

親テーマのディレクトリ構造をそのまま子テーマに持ってくると上書きは避けることが出来るのかも知れませんが、まだテストしていません。

ローカル環境、かつ自分で管理が出来て、アップデートが来たとしても無視しなければいけない点から、親テーマの編集をして行う方法は、他人に勧めるのはちょっと問題があるかと思います。

理想はプラグイン化して実装するのが確実だとは思いますが、まだ勉強中でそこまでの知識がありません。

もしプラグイン化出来れば、すぐに記事を更新したいと思います。

おわりに

テーマアップデートを考えると限定的な使い方しか出来ませんが、とりあえず請求番号を考える、どこかから持ってくる必要が無くなった事で、私には便利になりましたので記事にしてみました。

WordPressカスタマイズ、さらに精進しようと思います。

この辺りの本を読み込んだら、なんとか作れそうな気がします。

エンジニアのためのWordPress開発入門

エンジニアのためのWordPress開発入門

野島 祐慈, 菱川 拓郎, 杉田 知至, 細谷 崇, 枢木 くっくる
3,278円(02/21 12:46時点)
発売日: 2017/01/26
Amazonの情報を掲載しています
サイトの拡張性を飛躍的に高める WordPressプラグイン開発のバイブル

サイトの拡張性を飛躍的に高める WordPressプラグイン開発のバイブル

宮内 隆行, 西川 伸一, 岡本 渉, 三好 隆之
3,168円(02/21 12:46時点)
発売日: 2014/07/18
Amazonの情報を掲載しています
タイトルとURLをコピーしました