wordpress上に添付ファイル付きの入力フォームを作成し、kintoneへ登録できるようにしたい

実現したい事

wordpressで作成したサイトに入力フォームを設定し、テキストと添付ファイルを確認画面を介してkintoneへ登録できるようにしたい。
入力フォームはwordpressの固定ページでショートコードを設定しfunnctions.phpへkintone登録の設定をを行っています。

設定ファイル

file-operator.php : 確認画面で添付ファイルを保存する設定php
file-upload.php : kintoneに登録する設定php

課題について

入力画面->完了画面 へ登録する場合はkintoneへのテキストおよび添付ファイルの登録が確認できましたが、
入力画面 → 確認画面 → 完了画面 を介して登録する場合にはkitnoneへ登録されずにエラーも発生しない状態です。
確認画面時にファイル名とFileKeyを仮保存したデータを完了画面へ送付する際にうまくいかないようなので、コードの記載に関して
アドバイスや改善点、参考サイトなどあればいただきたいです。

参考にしたサイト

WordPressからkintoneへファイルをアップロードする #PHP - Qiita
ファイル添付機能を、確認画面付きのフォームに実装する方法

functions.php

function templateFile() {
    $html .= '<div class="content">';
    $html .= '<form action="" method="post" enctype="multipart/form-data">';
    $html .= '<input type="text" name="text_input">';
    $html .= '<input type="file" name="up_file">';
    $html .= '<input type="submit" id="upload" name="template_btn" value="ファイルアップロード">';
    $html .= '</form>';
    $html .= '</div>';

    return $html;
}
add_shortcode('template', 'templateFile');

//確認画面
function confirmFile() {
    require_once(dirname(__FILE__).'/template/file-operator.php');//添付ファイルの仮設定
    $file_operator = FileOperator::get_instance();
    $upload_file_names = $file_operator->upload_file();

    $html .= '<div class="content">';
    $html .= '<form action="" method="post" enctype="multipart/form-data">';
    $html .= '以下で確認します、よろしいでしょうか?';
    $html .= '<p>入力値'.$_POST["text_input"].'</p>';
    $html .= '<p>入力値'.$upload_file_names['upload_file_name'].'</p>';
    $html .= '<input type="hidden" name="text_input" value="'.$_POST["text_input"].'">';
    $html .= '<input type="hidden" name ="up_file" value="'.$upload_file_names['upload_file_name'].'">';
    $html .= '<input type="hidden" name ="tmp_file_name" value="'.$upload_file_names['tmp_file_name'].'">';
    $html .= '<input type="submit" name="complete_btn" value="完了画面">';
    $html .= '</form>';
    $html .= '</div>';

    return $html;
}
add_shortcode('confirm', 'confirmFile');

// 完了画面
function completeFile(){
    //file Upload
    require_once(dirname(__FILE__).'/kintone/file-upload.php');//kintoneの設定読み込み

    $file_key = $_POST['tmp_file_name'];
    $explode = explode(".", $file_key);
    $upload_file_name = $explode[0];

    if(isset($_FILES['up_file'])){
        $files = $_FILES['up_file'];
        $file_desc = $files; //$ _FILES配列を変換
        $record_num = xxx; //レコード番号は決め打ち
        file_upload($file_desc, $record_num,$upload_file_name); //関数にファイルとレコード番号,filekeyを渡します
    }
    
    $record_num = xxx; //レコード番号は決め打ち
    $kintones = get_kintone_data($record_num);//kintoneのレコード取得
    $html .= '<div class="content">';
    for($i=0; $i<count($kintones['records']); $i++){
        $drawing_attach = $kintones['records'][$i]['添付ファイル']['value'];
        for($d=0; $d<count($drawing_attach); $d++){
            $upload_file_name = $drawing_attach[$d]['name'];
            $html .= '<p>'.$upload_file_name.'</p>';
        }
    }
    $html .= '上記のファイル名で登録が完了しました。';
    $html .= '</div>';

    return $html;
}
add_shortcode('complete', 'completeFile');

file-operator.php

<?php
class FileOperator {
    private static ?object $instance = null;
    private string $tmp_dir = '';

    private function __construct() {
        //ファイルの一時格納を行うディレクトリを決定
        $this->tmp_dir = __DIR__ . '/template';
        $this->check_dir();
    }
    public function check_dir(): void {
        //ファイルの一時格納を行うディレクトリの存在確認をし、無ければ作成
        if (!is_dir($this->tmp_dir)) {
            mkdir($this->tmp_dir, 0700);
            file_put_contents("{$this->tmp_dir}/.htaccess", "deny from all");
        }
    }
    public static function get_instance() {
        if (self::$instance === null) {
            self::$instance = new self;
        }
        return self::$instance;
    }
    public function upload_file(): array {
        //index.phpから送られてきた添付ファイルの情報を取得
        $file_info = $_FILES['up_file'];

        //ファイルの拡張子を取得
        preg_match("/\.[^.]+$/", $file_info['name'], $extension_match);
        $extension = $extension_match[0];

        //ファイルがサーバー内で予め決められた一時ディレクトリに正しくアップロードされているか確認
        if (!is_uploaded_file($file_info['tmp_name'])) {
            return false;
        }
        //一時ファイルの名称を作成
        //同時にフォームが利用された場合に、ユーザーAの添付ファイルをユーザーBの添付ファイルが上書きしないよう、ユニークなファイル名を付ける
        $now_time = str_replace('.', '', microtime(true));
        $rand = mt_rand();
        $file_name = $now_time . $rand . $extension;

        //サーバー内で予め決められた一時ディレクトリから、このプログラムで利用する一時ディレクトリにファイルを移動
        move_uploaded_file($file_info['tmp_name'], "{$this->tmp_dir}/{$file_name}");

        //アップロードされたファイル名と、一時ディレクトリに保存したファイル名をreturn
        return [
            'upload_file_name' => $file_info['name'],
            'tmp_file_name' => $file_name
        ];
    }
    public function get_file_path(string $tmp_file_name): string {
        return "{$this->tmp_dir}/{$tmp_file_name}";
    }
    public function del_file(string $tmp_file_name): void {
        unlink("{$this->tmp_dir}/{$tmp_file_name}");
    }
    public function garbage_collection(): void {
        //ファイル作成からどれくらいの時間が経過したら削除するのか、秒単位で指定
        $del_time_seconds = 10 * 60; //30分 * 60秒

        //一時ディレクトリに残っているファイル一覧を取得
        $tmp_files = glob("{$this->tmp_dir}/*");
        foreach($tmp_files as $file_path) {
            //ファイルを作成した時間
            $file_create_time = filemtime($file_path);

            //ファイルを作成してからの経過時間
            $elapsed_time_since_create = time() - $file_create_time;

            //ファイルを作成してからの経過時間が、予め決めておいた削除基準時間を超過していたら、削除
            if($elapsed_time_since_create > $del_time_seconds) {
                unlink($file_path);
            }
        }
    }
}

kintone設定ファイルは返信に分割して記載します。

file-upload.php

// kintoneの設定(実際はxxxに設定しているものが入ります)
    define("SUB_DOMAIN", "xxxx"); //kintoneのサブドメイン
    define("APP_NO", "xxxx"); //kintoneのアプリID
    define("API_TOKEN", "xxxxxxxxxxxxxxxxxxxx"); //アプリで発行したトークン

//include for CSS and Javascript files
    add_action( 'wp_enqueue_scripts', 'kintone_enqueue_styles' ); 
    function kintone_enqueue_styles() { 
    wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/kintone/css/kintone-style.css' ); 
    }
    add_action( 'wp_enqueue_scripts', 'kintone_enqueue_script' );
    function kintone_enqueue_script() { 
        wp_enqueue_script('file-upload', get_template_directory_uri().'/kintone/js/file-upload.js', array('jquery'), '1.0.0', true);
        wp_enqueue_script('jquery.uploadThumbs', get_template_directory_uri().'/kintone/js/jquery.uploadThumbs.js', array('jquery'), '1.0.0', true);
    }
//*****************************************
// アプリデータ取得
//*****************************************/
function get_kintone_data($record_num){
        $url = "https://".SUB_DOMAIN.".cybozu.com/k/v1/records.json?app=".APP_NO."";	
    
        $search = "レコード番号 = \"{$record_num}\"";
        $url .= '&query='. utf8_uri_encode( $search );
    
        $args = array(
            'headers' => array(
                'X-Cybozu-API-Token' => API_TOKEN
            )
        );
    
        $kintone = wp_remote_get( $url, $args );

        $kintones = json_decode($kintone['body'],true);
    
        return $kintones;
    }

続き

//*****************************************
// ファイルアップロード
//*****************************************/
function file_upload($files, $record_num, $upload_file_names) 
{
    //アップロード(1つのファイルに修正する)
    $upload_url = "https://".SUB_DOMAIN.".cybozu.com/k/v1/file.json";
    $file_path = $files['tmp_name'];
    $file_name = $files['name'];
        
    //今回はcurlでアップロードします。
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $upload_url);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST" );
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HTTPHEADER, [
    'X-Cybozu-API-Token:'.API_TOKEN
    ]);
    curl_setopt($curl, CURLOPT_POST, true);
    $file = new CURLFile($file_path, 'application/octet-stream', $file_name);
    curl_setopt(
    $curl, CURLOPT_POSTFIELDS, array('file' => $file)
    );
    $res = curl_exec($curl);
    $resuponse = json_decode( $res , true );
    curl_close ($curl);

    $key = $upload_file_names;

    //アプリデータ取得
    $url = "https://".SUB_DOMAIN.".cybozu.com/k/v1/records.json?app=".APP_NO."";	

    $search = "レコード番号 = \"{$record_num}\"";
    $url .= '&query='. utf8_uri_encode( $search );

    $args = array(
        'headers' => array(
                'X-Cybozu-API-Token' => API_TOKEN
        )
    );

    $kintone = wp_remote_get( $url, $args );
    $kintones = json_decode($kintone['body'],true);

    //添付ファイル
    $subtable = $kintones['records'][0]['添付ファイル']['value'];

    //keyを"fileKey" => $keyの形で配列に入れる
    if($key){
            $key_array = array(array("fileKey" => $key));
    }else{
            $key_array = "";
    }

    //取得した添付ファイルデータにアップロードするkeyを追加
    $result_key = array_merge($subtable, $key_array);

    //bodyにアプリ番号とレコード番号とkeyをセット
    $body =  array(
                "app" => APP_NO,
                "id" => $record_num,
                "record" => array(
                    "添付ファイル" => array (
                        "value" => $result_key
                    ),
                ),
    );
    //レコードの上書きなのでPUTで書き込みます。
    $options = array(
        'method'=> 'PUT',
            'headers' => array(
                        'X-Cybozu-API-Token' => API_TOKEN,
                        'Content-Type' => 'application/json'
                    ),
            'body' => json_encode($body)
    );
   //PUTで書き込むのでwp_remote_requestを使います。
    $results = wp_remote_request("https://".SUB_DOMAIN.".cybozu.com/k/v1/record.json", $options);
    //書き込み成功(デバッグ用)
    print_r($results['body']);
}