Welcart の購入数量をリスト選択にする


スポンサーリンク

Welcart の購入数量を固定にしたいと気がある。 要するに1個、5個、10個の単位でしか購入できない場合だ。 購入数量のフィールドを作り出すのは、funstions/template_func.php の中の usces_the_itemQuant でやっている。 ここをカスタマイズしなけばいけないのだけど・・・ すべてがすべてそうではない。 だからここを直接直すわけにはいかない。 商品マスターにカスタムフィールドを設けるしかないかな? カスタムフィールドを見て、数量入力なのか、リスト選択なのか・・・

Welcart 購入数量の方式を切り替える方法

WelCart のバージョンアップのたび書き換えるのはカッコ悪い。 現在のところ usces_the_itemQuant は、フックは持っていない。 バージョンアップの時に書き換えようってことで、フックを追加する。 具体的には、こんな感じ
function usces_the_itemQuant( $out = '' ) {
	global $usces, $post;
	$post_id = $post->ID;
	$sku = esc_attr(urlencode($usces->itemsku['code']));
	$value = isset( $_SESSION['usces_singleitem']['quant'][$post_id][$sku] ) ? $_SESSION['usces_singleitem']['quant'][$post_id][$sku] : 1;
	$quant = "<input name=\"quant[{$post_id}][" . $sku . "]\" type=\"text\" id=\"quant[{$post_id}][" . $sku . "]\" class=\"skuquantity\" value=\"" . $value . "\" onKeyDown=\"if (event.keyCode == 13) {return false;}\" />";
	$html = apply_filters('usces_filter_the_itemQuant', $quant, $post);

	$html = apply_filters( 'usces_the_itemQuant_para_to_customer', $html); ←フックの追加

	if( $out == 'return' ){
		return $html;
	}else{
		echo $html;
	}
}
呼び出し側
/*           フック名                              マイ関数          優先順位 受け取り引数 */
add_filter("usces_the_itemQuant_para_to_customer","welcartitemQuant",10      , 1 );
function welcartitemQuant($html) {
 :
}
これで好きなことができる。

WelCart の購入数量入力の切り替えは、カスタムフィールドで個数選択させようか。

※このソースは試作サンプルのなので実際に動かしていません。 以下をプラグインに足して、その内容をみて select にするか input にするか決めるといい。

Welcart 商品マスターに個数をエントリー

/********************************************************/
/* function body エントリーの表示 (投稿画面) */
/********************************************************/
function welcart_entry() {
	global $post;
	$welcart_entry_value = get_post_meta($post->ID, $meta_box['itemQuant'], true);
	echo'<input type="hidden" name="itemQuant_noncename" id="itemQuant_noncename" value="'.wp_create_nonce( plugin_basename(__FILE__) ).'" />';
	echo'<textarea name="itemQuant" cols="54" rows="5"/>'.$welcart_entry_value.'</textarea>';
	echo'<br />';
}
/********************************************************/
/* 設定 */
/********************************************************/
function create_welcart_entry() {
	global $theme_name;
	if ( function_exists('add_meta_box') ){
		/* 商品マスターは、ページなので ページ内にメタボックスを設定する */
		add_meta_box(
		'work-welcart-entry_meta-boxes', 	// メタボックスID
		'Welcart 数量エントリー', 		// メタボックスタイトル
		'welcart_entry',			// メタボックス内容表示 callback
		'page',		// メタボックスの表示先 (post, page, link, dashboard,)
		'normal',	// 編集画面での表示場所 (normal, advanced, side) 
		'high' );	// メタボックス表示優先度 (high, core, default, low)
	}
}
/********************************************************/
/* 入力内容を保存										*/
/********************************************************/
function entry_welcart_meta_save_postdata( $post_id ) {
	global $post, $entry_meta_boxes;
	foreach($entry_meta_boxes as $meta_box) {
	// Verify
		if ( !wp_verify_nonce( $_POST['itemQuant_noncename'], plugin_basename(__FILE__) )) {
			return $post_id;
		}

		if ( 'page' == $_POST['post_type'] ) {
			if ( !current_user_can( 'edit_page', $post_id ))
				return $post_id;
		} else {
			if ( !current_user_can( 'edit_post', $post_id ))
				return $post_id;
		}

		$data = $_POST[$meta_box['itemQuant']];

		if(get_post_meta($post_id, $meta_box['itemQuant']) == "")
			add_post_meta($post_id, $meta_box['itemQuant'], $data, true);
		elseif($data != get_post_meta($post_id, $meta_box['itemQuant'], true))
			update_post_meta($post_id, $meta_box['itemQuant'], $data);
		elseif($data == "")
			delete_post_meta($post_id, $meta_box['itemQuant'], get_post_meta($post_id, $meta_box['itemQuant'], true));
	}
}
/********************************************************/
/* WP 設定メニュー表示/投稿ページでの設定表示			*/
/********************************************************/
add_action('admin_menu', 'create_welcart_entry');
add_action('save_post', 'entry_welcart_meta_save_postdata');

スポンサーリンク