• Resolved tonkotsutaro

    (@tonkotsutaro)


    wp-admin/admin.php?page=wc4jp-options&tab=shipment
    こちらの配達時間帯開始時間及び配達時間帯終了時間の入力項目がtimeになっておりますがtextに変更できるようにして欲しいです。

    ヤマト運輸のCSVの仕様で、例えば午前指定として取り込みたい場合、0812といったフォーマット指定になっておりますが、現在の仕様ではエラーとなり取り込めません。

    該当のファイルを子テーマにコピーしてオーバーライドを試みましたがプラグイン側が対応していないようです。

    現在プラグイン内のコードを直接textにかえて対応していますがプラグインの更新ごとに対応が必要なためスマートに対応したいと考えております。

Viewing 5 replies - 1 through 5 (of 5 total)
  • Plugin Author shohei.tanaka

    (@shoheitanaka)

    @tonkotsutaro 以前より、そのような方のために[wc4jp_delivery_time_zone]と[wc4jp_delivery_date]のフィルターフックを用意しております。
    こちらでカスタマイズして頂ければ問題ないかと思います。

    ご確認のほど、よろしくお願いいたします。

    Thread Starter tonkotsutaro

    (@tonkotsutaro)

    ご回答ありがとうございます。
    ご連絡頂いたフィルターや他のフィルターも含め動作せず困惑しております。

    PHPのバージョンが関連している可能性はありますか。
    8.0.25

    アクションフックフィルターフックは他に実装しておりそれらは稼働しております。

    Thread Starter tonkotsutaro

    (@tonkotsutaro)

    add_filter( 'wc4jp_delivery_time_format', 'custom_delivery_time_format' );
    
    function custom_delivery_time_format( $time_format ) {
       $time_format = '%1$s-%2$s'; // フォーマットを"開始時間-終了時間"に変更
       return $time_format;
    }
    
    function my_custom_unselected_timezone_label( $label ) {
        return '未選択';
    }
    add_filter( 'japanized_for_woocommerce_unselected_timezone_label', 'my_custom_unselected_timezone_label', 99 );
    

    これ以外も試しましたがデバッグモードで実行したところ、それぞれのfunctionの中に入ってすらいないようでした。

    • This reply was modified 11 months, 2 weeks ago by tonkotsutaro.
    Plugin Author shohei.tanaka

    (@shoheitanaka)

    @tonkotsutaro ご提示頂いたコードを拝見しましたが、フィルターフックの意味が理解されていないようにお見受けします。

    そもそも、[wc4jp_delivery_time_format]や[japanized_for_woocommerce_unselected_timezone_label]というフックは存在しないですが、何故このようなコードを書かれているのかが、ちょっと理解できません。

    まずは、しっかりとコーディング(WordPressとPHPのお作法)の勉強をすることをお勧めしますが、フィルターフックを使う際には、そのフィルターフックがどこでどのような挙動をしているかをコードから把握する必要があります。

    [wc4jp_delivery_time_zone]と[wc4jp_delivery_date] に関してはコードリーティングしていただければそこまで複雑ではないので理解いただけるはずなのですが、POST からデータを保存する際に変換することが出来るフックです。なので、例えば、「10:00-12:00」と POST されている内容を保存前に「1012」に変更することが出来ます。

    一例としてコーディングを提示させていただきます。

    add_filter( 'wc4jp_delivery_time_zone', 'custom_wc4jp_delivery_time_zone' );
    
    function custom_wc4jp_delivery_time_zone( $post_time_zone ){
        if( $post_time_zone == '10:00-12:00') $post_time_zone = '1012';
        return $post_time_zone;
    }

    ちょっと案件ではないので、動作確認はしていませんが、これで動くはずです。order_metaとして保存されるのが「10:00-12:00」ではなく「1012」になるはずです。

    このような簡単な変更の場合は、これで良いですが、データ加工や$orderオブジェクトから情報を抜き出して対応する場合は必ずサニタイズ処理を忘れないようにしてください。

    まずはフィルターフックを利用する際には、他のプラグインや WordPressのコアも含めてですが、フック設定の apply_filters がどのような場所でどこで使われているのか、またどのような挙動かを必ず把握して利用してください。もし、それを行わなかった場合は、意図せぬ情報変更や情報漏洩の可能性も出てきます。特に個人情報を扱うネットショップのサイトでは損害賠償請求の対象となる可能性が非常に高くなりますので、ご注意ください。

    • This reply was modified 11 months, 2 weeks ago by shohei.tanaka.
    Thread Starter tonkotsutaro

    (@tonkotsutaro)

    お世話になっております。
    ご回答ありがとうございました。
    サンプルコードのおかげで仕様を理解できました。
    管理画面のtime形式についてご相談していたため管理画面周りのフィルターかと思い見当違いの場所を確認しておりました。
    無事希望のフォーマットとすることができました。

    謎のコードについてはchatgpt3にいくつか質問をして生成されたコードをそのまま転用したものです。
    フィルターフック周りは知識がかなり浅かったためgptを使ってみましたが混乱をお招きしてしまい申し訳ございませんでした。

    // 注文完了時、時間指定をヤマト運輸フォーマットに変換 08:00-12:00 -> 0812
    add_filter( 'wc4jp_delivery_time_zone', 'custom_wc4jp_delivery_time_zone' );
    function custom_wc4jp_delivery_time_zone( $post_time_zone ) {
    	$start_time = substr( $post_time_zone, 0, 2 );
    	$end_time   = substr( $post_time_zone, 6, 2 );
    
    	return $start_time . $end_time;
    }
Viewing 5 replies - 1 through 5 (of 5 total)
  • The topic ‘管理画面での配達時間帯管理の入力制限について’ is closed to new replies.