返信先: dec_order_idの生成について提案

フォーラム 要望と提案 dec_order_idの生成について提案 返信先: dec_order_idの生成について提案

#96649
phper
参加者

コードを見て疑問点が4つほどあったので追記です。

usces_action_reg_orderdata()の中で下記のようになっていますが、

if( 100 < $olimit ){
	$usces->set_order_meta_value('dec_order_id', uniqid(), $order_id);
}else{
	$usces->set_order_meta_value('dec_order_id', $dec_order_id, $order_id);
}

100桁を超えた場合に、uniqid()で生成した値を直接登録してしまっているため下記のフックでのカスタマイズが及ばなくなります。
$dec_order_id = apply_filters( 'usces_filter_dec_order_id_prefix', $options['system']['dec_orderID_prefix'], $args ) . apply_filters( 'usces_filter_dec_order_id', $dec_order_id, $args );

そもそも100桁なんていうオーダーIDは非現実的であるため、桁数の登録時点で制限をかけるべきだと思います。
そうすればこのような冗長的なコードを書かなくてもよいので・・。

あと、下記のコードですが、while内のコードの可読性が悪く最初何をやっているのかとおもいましたが、usces_get_key()で仮にfalse判定を受けた場合、次の処理に進んでしまいますが大丈夫でしょうか。例えば引数が0桁とか空文字とかの場合。


while( $ukey = usces_get_key( $options['system']['dec_orderID_digit'] ) ){
	$ores = $wpdb->get_var($wpdb->prepare("SELECT meta_key FROM $otable WHERE meta_key = %s AND meta_value = %s LIMIT 1", 'dec_order_id', $ukey));
	if( !$ores || 100 < $olimit )
		break;
	$olimit++;
}

上記で重複をせっかくチェックしているのであれば、100桁オーバーの際にuniqid()で直接値を登録せずに、uniqid()で生成されたdec_order_idについてもチェックが必要であると思います。
お分かりでしょうが、uniqid()は完全なユニークを生成するものではないので。

少々荒っぽい物言いになってしまったかもしれませんが、ご確認とご検討をお願いします。