だ。ログ。

開発とかスノボとかやきうとか。

WooCommerceで受注状況を追加する

早速WooCommerceを使って色々と調査している。
やはりWPが骨子になっているだけあって、いままでEC-CUBEの常識で考えていた部分とはかなり変わっている部分がありまだ調査段階が続いている。
とりあえずは、まず管理画面の自由度を上げる部分に自分は専念。

デフォルトのステータスでは

  • 支払い待ち
  • 処理中
  • 保留中
  • 完了
  • キャンセル
  • 払い戻し
  • 失敗

上記のステータスの中で商品売買に関する情報を管理しなくてはならない。
ただこの部分はもっと細かく細分化したいと言う要望も結構ある。簡単にDBで管理しているワケでは無い。
追加する為には以下のソースコードの修正が必要

/wp-content/plugins/woocommerce/includes/wc-order-functions.php 95行目あたり

function wc_get_order_statuses() {
	$order_statuses = array(
		'wc-pending'    => _x( 'Pending payment', 'Order status', 'woocommerce' ),
		'wc-processing' => _x( 'Processing', 'Order status', 'woocommerce' ),
		'wc-on-hold'    => _x( 'On hold', 'Order status', 'woocommerce' ),
		'wc-completed'  => _x( 'Completed', 'Order status', 'woocommerce' ),
		'wc-cancelled'  => _x( 'Cancelled', 'Order status', 'woocommerce' ),
		'wc-refunded'   => _x( 'Refunded', 'Order status', 'woocommerce' ),
		'wc-failed'     => _x( 'Failed', 'Order status', 'woocommerce' ),
	);
	return apply_filters( 'wc_order_statuses', $order_statuses );
}

このステータス上に任意のステータスを足す。

function wc_get_order_statuses() {
	$order_statuses = array(
		'wc-pending'    => _x( 'Pending payment', 'Order status', 'woocommerce' ),
		'wc-processing' => _x( 'Processing', 'Order status', 'woocommerce' ),
		'wc-on-hold'    => _x( 'On hold', 'Order status', 'woocommerce' ),
		'wc-completed'  => _x( 'Completed', 'Order status', 'woocommerce' ),
		'wc-cancelled'  => _x( 'Cancelled', 'Order status', 'woocommerce' ),
		'wc-refunded'   => _x( 'Refunded', 'Order status', 'woocommerce' ),
		'wc-failed'     => _x( 'Failed', 'Order status', 'woocommerce' ),
#追加
		'wc-test'     => _x( 'テスト', 'Order status', 'woocommerce' ),
	);
	return apply_filters( 'wc_order_statuses', $order_statuses );
}

ちなみに、日本語化パッチを当てるとこの部分を翻訳してくれるが新規追加は直接2バイト文字でも問題はなかった。
ただここだけを追加して、ステータスを変更するとエラーで更新自体は出来るが一覧に戻るとデータが消えてしまうので注意。
このステータスに関してをWPでPOSTするオブジェクトとしての認識が必要となる。

/wp-content/plugins/woocommerce/includes/class-wc-post-types.php 492行目あたり

				'wc-failed'     => array(
					'label'                     => _x( 'Failed', 'Order status', 'woocommerce' ),
					'public'                    => false,
					'exclude_from_search'       => false,
					'show_in_admin_all_list'    => true,
					'show_in_admin_status_list' => true,
					'label_count'               => _n_noop( 'Failed <span class="count">(%s)</span>', 'Failed <span class="count">(%s)</span>', 'woocommerce' ),
				),

wc-failedの後ろに追加したステータスを足す。

				'wc-test'     => array(
					'label'                     => _x( 'HDStest', 'Order status', 'woocommerce' ),
					'public'                    => false,
					'exclude_from_search'       => false,
					'show_in_admin_all_list'    => true,
					'show_in_admin_status_list' => true,
					'label_count'               => _n_noop( 'Failed <span class="count">(%s)</span>', 'HDStest <span class="count">(%s)</span>', 'woocommerce' ),
				),

これで問題なくステータス更新が出来るようになった。
ソースコード内で完結している事が多いので、たどればある程度の機能は見つかると思うが、この辺を紐解く力が今後は必要になりそう。