解決済WCEX Yamato Numberへのカスタマイズが効かなくなった

フォーラム 拡張プラグイン 【解決済】WCEX Yamato Numberへのカスタマイズが効かなくなった

  • このトピックには9件の返信、2人の参加者があり、最後にurushiにより1週、 1日前に更新されました。
10件の投稿を表示中 - 1 - 10件目 (全10件中)
  • 投稿者
    投稿
  • #102124
    suitchocolat
    参加者

    ——————————————-
    WordPress のバージョン:6.5.4
    Welcart のバージョン:2.10.3
    PHP のバージョン:7.4.33
    Welcart専用の拡張プラグインとバージョン:WCEX Yamato Number 1.2.2
    ご利用の親テーマとバージョン :ICONIC
    ご利用の子テーマとバージョン :自作
    症状を確認したブラウザ:Google Chrome
    サーバー【重要】:エックスサーバー
    ——————————————–
    平素より大変お世話になっております。
    WCEX Yamato Numberの機能で出力される出荷データCSVの内容を変更したく、下記のカスタマイズをfunction.phpに記述しているのですが、テーマの変更によるサイトデザインのリニューアルをきっかけに効かなくなってしまいした。
    なお、テストサイトでは問題なく動作するので、何か初歩的な勘違いや見落としがあるのでは…と思いご質問させていただいた次第です。
    何かヒントだけでもいただけましたら嬉しいです。
    何卒よろしくお願いいたします。

    【カスタマイズの機能】
    発送温度帯が異なる商品が同時注文されているときの、「受注リスト>B2出荷データ出力」で出力されるデータの送り状種別を設定
    例)冷蔵発送商品と常温発送商品が同時注文されている際、送り状種別を冷蔵にする

    【確認したこと】
    ・テスト環境では問題なく動作
    ・テスト環境と本番環境のコード、プラグインのバージョンやテーマは同一
    ・B2出荷データ出力で動作するプラグイン(wcex_yamato_number)のバージョンも同じ

    function csm_wcynb2_filter_outcsv_data( $ldata, $order_id, $data, $cart ) {
    	global $usces;
    	$op = $usces->options;
    	$c_arr = [];
    	foreach ( $op['shipping_charge'] as $value ){
    		switch ( $value['name'] ){
    			case '宅急便コンパクト(常温)':
    				$c_arr += [$value['id'] => '0'];
    				break;
    			case '宅急便(常温)':
    				$c_arr += [$value['id'] => '1'];
    				break;
    			case 'クール便':
    				$c_arr += [$value['id'] => '2'];
    				break;
    			case 'クール便(冷凍)':
    				$c_arr += [$value['id'] => '3'];
    				break;
    			default:
    		}
    	}
    
    	$i = 0;
    	$t = [];
    	foreach ($cart as $value){
    		$iCode = $cart[$i]['item_code'];
    		$iPostID = wel_get_id_by_item_code( $iCode, 'false' );
    		$itemData = wel_get_product( $iPostID, 'fales' );
    		$iShippingCharge = $itemData['itemShippingCharge'];
    		switch ( $c_arr[$iShippingCharge] ){
    			case '0':
    				$t[0] = true;
    				break;
    			case '1':
    				$t[1] = true;
    				break;
    			case '2':
    				$t[2] = true;
    				break;
    			case '3':
    				$t[3] = true;
    				break;
    			default:
    				$t[5] = true;
    		}
    		$i++;
    	}
    
    	if( $t[3] ) { //冷凍
    		$ldata['送り状種別'] = '0';
    		$ldata['クール区分'] = '1';
    	} elseif( $t[2] ) { //冷蔵
    		$ldata['送り状種別'] = '0';
    		$ldata['クール区分'] = '2';
    	} elseif( $t[1] ) { //常温
    		$ldata['送り状種別'] = '0';
    		$ldata['クール区分'] = '';
    	} elseif( $t[0] ) { //宅急便コンパクト
    		$ldata['送り状種別'] = '8';
    		$ldata['クール区分'] = '';
    	} elseif( $t[5] ) { //直送など
    		$ldata['送り状種別'] = '0';
    		$ldata['クール区分'] = '';
    	}
    
    	return $ldata;
    } 
    add_filter( 'wcynb2_filter_outcsv_data', 'csm_wcynb2_filter_outcsv_data', 10, 4 );
    #102126
    urushi
    キーマスター

    suitchocolat 様

    こんにちは。
    「テーマの変更によるサイトデザインのリニューアル」とのことですが、このカスタマイズは元々本番環境の別の(元の)テーマに入っていたものでしょうか。そのときは問題なく動作していたでしょうか。

    #102133
    suitchocolat
    参加者

    urushi様

    早速のお返事誠にありがとうございます。

    こちらのカスタマイズは、元々使用していたテーマ(ICONIC)に入っていたものではなく、外注で作成していただいたものですが、リニューアル前は問題なく動作していました。

    何卒よろしくお願いいたします。

    #102144
    urushi
    キーマスター

    suitchocolat 様

    本番環境とテスト環境の、Welcart Shop>配送設定>「配送名」と「送料名」のセレクトをご確認ください。
    配送名は「(数字):(配送名)」のようになっており、送料名は「(送料名)」になっていますが、
    登録されている「配送名」と「送料名」の(数字)と(配送名)(送料名)は、双方のサイトで完全に一致しているでしょうか。

    #102146
    suitchocolat
    参加者

    urushi様

    ご返信下さり誠にありがとうございます。

    送料名については、本番環境では10項目、テスト環境では8項目設定されており、本番環境の1~8項目目はテスト環境と同一です(テスト環境を本番環境から複製構築後、本番環境のみに送料設定を2つ追加しました)

    配送名についても同様で、本番環境では8項目、テスト環境では5項目設定されています。

    なお上記カスタマイズのコードに登場する送料名はいずれの環境にも同じ名前で設定されています。

    テスト環境にも本番環境に追加した設定を追加してみるべきでしょうか?

    #102157
    urushi
    キーマスター

    suitchocolat 様

    では、テスト環境と本番環境の、同じ配送名の数字のところ「(数字):(配送名)」は、合っているでしょうか。
    送料の方はセレクトフィールドを検証ツールで見て、value値を確認しなくてはいけません。
    テスト環境ではなく、本番環境で動くようにしたいのであれば、本番環境の配送名、送料名に合った数字(インデックス)になっているか確認してください。

    #102168
    suitchocolat
    参加者

    urushi様

    ご教示誠にありがとうございます。
    確認すべきvalue値ですが、添付画像のように検証ツールでoption valueの値を見る、であっていますでしょうか?
    option valueの値及び送料名は全て同一でした…
    他にも何か思いつく点があれば何卒よろしくお願いいたします。

    Attachments:
    You must be logged in to view attached files.
    #102170
    suitchocolat
    参加者

    度々失礼いたします。
    調べを進めたところ、本番環境では$cartに入っている商品情報が1点のみになってしまっている事がわかりました。

    【調査方法】
    ※参考https://haniwaman.com/functions-value/
    ①下記を参照し、ワードプレスをデバックモードにしてエラーログを出力するように設定
    ②上記のカスタマイズコードを下記に変更し$cartの中身を調べた

    // WCEX Yamato NumberのCSV出力に発送区分反映
    function csm_wcynb2_filter_outcsv_data( $ldata, $order_id, $data, $cart ) {
    	ob_start();
    	var_dump( $cart );
    	$test = ob_get_contents();
    	ob_end_clean();
    	error_log( '処理前cart: ' . $test );
    	global $usces;
    -以下変更なし-
    

    【実行結果】
    テスト環境:

    [05-Jul-2024 05:32:52 UTC] 処理前cart: array(2) {
      [0]=>
      array(19) {
        ["cart_id"]=>
        string(5) "13451"
        ["order_id"]=>
        string(4) "8498"
        ["group_id"]=>
        string(1) "0"
        ["row_index"]=>
        string(1) "0"
        ["post_id"]=>
        string(5) "16794"
        ["item_code"]=>
        string(7) "lgs-001"
        ["item_name"]=>
        string(63) "商品A"
        ["cprice"]=>
        string(11) "20231106.00"
        ["sku_code"]=>
        string(9) "lgs-001-2"
        ["sku_name"]=>
        string(10) "2個入り"
        ["price"]=>
        string(6) "750.00"
        ["quantity"]=>
        string(1) "1"
        ["unit"]=>
        string(0) ""
        ["tax"]=>
        string(4) "0.00"
        ["destination_id"]=>
        string(1) "0"
        ["cart_serial"]=>
        string(0) ""
        ["sku"]=>
        string(9) "lgs-001-2"
        ["options"]=>
        array(0) {
        }
        ["advance"]=>
        array(0) {
        }
      }
      [1]=>
      array(19) {
        ["cart_id"]=>
        string(5) "13452"
        ["order_id"]=>
        string(4) "8498"
        ["group_id"]=>
        string(1) "0"
        ["row_index"]=>
        string(1) "1"
        ["post_id"]=>
        string(5) "15872"
        ["item_code"]=>
        string(7) "mon-012"
        ["item_name"]=>
        string(54) "商品B"
        ["cprice"]=>
        string(11) "20230515.00"
        ["sku_code"]=>
        string(7) "mon-012"
        ["sku_name"]=>
        string(0) ""
        ["price"]=>
        string(7) "2050.00"
        ["quantity"]=>
        string(1) "1"
        ["unit"]=>
        string(0) ""
        ["tax"]=>
        string(4) "0.00"
        ["destination_id"]=>
        string(1) "0"
        ["cart_serial"]=>
        string(0) ""
        ["sku"]=>
        string(7) "mon-012"
        ["options"]=>
        array(1) {
          ["お渡し用のお手提げ(無料)"]=>
          string(6) "不要"
        }
        ["advance"]=>
        array(0) {
        }
      }
    }
    
    

    本番環境

    [05-Jul-2024 05:32:55 UTC] 処理前cart: array(1) {
      [0]=>
      array(19) {
        ["cart_id"]=>
        string(5) "19057"
        ["order_id"]=>
        string(5) "11811"
        ["group_id"]=>
        string(1) "0"
        ["row_index"]=>
        string(1) "3"
        ["post_id"]=>
        string(5) "15872"
        ["item_code"]=>
        string(7) "mon-012"
        ["item_name"]=>
        string(54) "商品名B"
        ["cprice"]=>
        string(11) "20240419.00"
        ["sku_code"]=>
        string(7) "mon-012"
        ["sku_name"]=>
        string(0) ""
        ["price"]=>
        string(7) "2444.00"
        ["quantity"]=>
        string(1) "1"
        ["unit"]=>
        string(0) ""
        ["tax"]=>
        string(4) "0.00"
        ["destination_id"]=>
        string(1) "0"
        ["cart_serial"]=>
        string(0) ""
        ["sku"]=>
        string(7) "mon-012"
        ["options"]=>
        array(1) {
          ["お渡し用のお手提げYC"]=>
          string(6) "不要"
        }
        ["advance"]=>
        array(0) {
        }
      }
    }
    
    

    $cart内に複数の商品が入るようにするにはどうすればいいのでしょうか?
    何卒ご教示いただけますと幸いです。
    よろしくお願いいたします。

    #102175
    suitchocolat
    参加者

    大変恐れ入りますが自己解決しました。
    YamatoNumber.class.php内の make_individual_cart( $cart_org )をカスタマイズしており、本番環境のみ、そのコードに誤りがありました。

    テスト環境

    	public function make_individual_cart( $cart_org ) {
    		
      		global $usces;
    		$opt_shipping_charges = $usces->options['shipping_charge'];//送料設定の配列を取得
    
    		$individual_cart = array();
    		$normal_cart = array();
    		$reizou_cart = array();
    		$reitou_cart = array();
    
    		foreach ( $cart_org as $org ) {
    			$is_individual = false;
    			$post_id = (int) $org['post_id'];
    			$quantity = (int) $org['quantity'];
    			$product = wel_get_product( $post_id );
    			$is_individual = $product['itemIndividualSCharge'];
    			if ( $is_individual ) {
    				$org['quantity'] = 1;
    				for ( $i = 0; $i < $quantity; $i++ ) {
    					$individual_cart[] = array( $org );
    				}
    			} else {
    				$normal_cart[] = $org;
    			}
    		}
    		if ( ! empty( $normal_cart ) ) {
    			foreach ( $normal_cart as $org){
    				$post_id = (int) $org['post_id'];
    				$product = wel_get_product( $post_id );
    				$item_shipping_charge_id = $product['itemShippingCharge'];
    				foreach($opt_shipping_charges as $opt_shipping_charge) {
        			if($item_shipping_charge_id == $opt_shipping_charge['id']) {
            			switch ( $opt_shipping_charge['name']){
    						case '宅急便コンパクト(常温)':
    							$reizou_cart[] = $org; 
    							break;
    						case 'クール便':
    							$reizou_cart[] = $org; 
    							break;
    						case '宅急便(常温)':
    							$reizou_cart[] = $org; 
    							break;
    						case 'クール便(冷凍)';
    							$reitou_cart[] = $org; 
    							break;
    						default:
    						}
            		break;
        			}
    				}
    			}
    		if ( ! empty( $reizou_cart ) ) {
    			$individual_cart[] = $reizou_cart;
    		}
    		if ( ! empty( $reitou_cart ) ) {
    			$individual_cart[] = $reitou_cart;
    		}
    		}
    		return $individual_cart;
    	}

    本番環境

    	public function make_individual_cart( $cart_org ) {
    		
      		global $usces;
    		$opt_shipping_charges = $usces->options['shipping_charge'];//送料設定の配列を取得
    
    		$individual_cart = array();
    		$normal_cart = array();
    
    		foreach ( $cart_org as $org ) {
    			$is_individual = false;
    			$post_id = (int) $org['post_id'];
    			$quantity = (int) $org['quantity'];
    			$product = wel_get_product( $post_id );
    			$is_individual = $product['itemIndividualSCharge'];
    			if ( $is_individual ) {
    				$org['quantity'] = 1;
    				for ( $i = 0; $i < $quantity; $i++ ) {
    					$individual_cart[] = array( $org );
    				}
    			} else {
    				$normal_cart[] = $org;
    			}
    		}
    		if ( ! empty( $normal_cart ) ) {
    			foreach ( $normal_cart as $org){
    				$post_id = (int) $org['post_id'];
    				$product = wel_get_product( $post_id );
    				$item_shipping_charge_id = $product['itemShippingCharge'];
    				foreach($opt_shipping_charges as $opt_shipping_charge) {
        			if($item_shipping_charge_id == $opt_shipping_charge['id']) {
            			switch ( $opt_shipping_charge['name']){
    						case '宅急便コンパクト(常温)':
    							$reizou_cart = array($org); 
    							break;
    						case 'クール便':
    							$reizou_cart = array($org); 
    							break;
    						case '宅急便(常温)':
    							$reizou_cart = array($org); 
    							break;
    						case 'クール便(冷凍)';
    							$reitou_cart = array($org); 
    							break;
    						default:
    						}
            		break;
        			}
    				}
    			}
    		if ( ! empty( $reizou_cart ) ) {
    			$individual_cart[] = $reizou_cart;
    		}
    		if ( ! empty( $reitou_cart ) ) {
    			$individual_cart[] = $reitou_cart;
    		}
    		}
    		return $individual_cart;
    	}
    
    

    当店では【常温】【冷蔵】【冷凍】の三温度帯の商品を扱っており、常温と冷蔵は同梱できるのですが、冷凍とその他の温度帯は同梱できず、伝票を2枚出力する必要があり、このようにカスタマイズしています。

    プラグインのコードを直接編集するのは避けるべきと重々承知しているのですが、ここにフィルターフックが無かったので…
    お騒がせして大変申し訳ありませんでした。
    誠にありがとうございました。

    #102176
    urushi
    キーマスター

    suitchocolat 様

    ご丁寧にご連絡いただきありがとうございます。
    解決されたのであれば良かったです!
    こちらのトピックは解決済みとさせていただきます。
    引き続き Welcartをよろしくお願いいたします。

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