dec_order_idの生成について提案

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

  • このトピックには2件の返信、2人の参加者があり、最後にsagawaにより2年、 7ヶ月前に更新されました。
3件の投稿を表示中 - 1 - 3件目 (全3件中)
  • 投稿者
    投稿
  • #96641
    phper
    参加者

    2系で更新されていたら申し訳ありません。

    dec_order_idの生成に関して、なぜか関数化されていないようで、
    usces_action_reg_orderdata()内で生成されるdec_order_idと、
    usces_get_deco_order_id()内で、metaデータにdec_orderidが存在しない場合での、
    生成処理が異なるためデータに差異が生まれると思われます。

    いっそ関数化してはと思いますがいかがでしょうか。
    こちらが確認したVerは下記です。

    Version 1.9.37.2011241

    #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()は完全なユニークを生成するものではないので。

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

    #96912
    sagawa
    キーマスター

    phper様

    ご報告いただき、ありがとうございます。
    確認・検討いたします。
    貴重なご意見をありがとうございます。

3件の投稿を表示中 - 1 - 3件目 (全3件中)
  • このトピックに返信するにはログインが必要です。