首页 > 解决方案 > WooCommerce:如何在订单中显示自定义文件(管理面板)

问题描述

我有一个 WooCommerce 商店,所有产品都在 iframe 中。当您单击“添加到购物车”按钮时,iframe 将发送一个文件,其中很可能包含一张照片。我需要在管理员中按订单详细信息显示此文件。我有 file_storage.php,其中注册了 POST 和 GET 方法

<?php

const FILES_SUBDIR = 'files/';

function idea_api_upload_file(WP_REST_Request $request) {

    if (!empty($request->get_body())) {

        $upload_dir = idea_get_upload_dir().FILES_SUBDIR;
        if (!is_dir($upload_dir)) {
            mkdir($upload_dir, 0777, true);
        }

        $id = time();

        $filename = $upload_dir.$id.'.json';
        $success = file_put_contents($filename, $request->get_body());

        if ($success)
            $response = new WP_REST_Response(array(
                'id' => $id,
                'link' => rest_url('idea/v1/get_file/'.$id),
                'size' => filesize($filename)
            ));
        else
            $response = new WP_REST_Response(array('error' => 'Unable to store file'), 500);

    } else {
        $response = new WP_REST_Response(array('error' => 'Bad request'), 400);
    }

    /*if (get_option('v3d_cross_domain'))
        $response->header('Access-Control-Allow-Origin', '*');*/

    return $response;

}

function idea_api_get_file(WP_REST_Request $request) {

    $id = intval($request->get_param('id'));

    if (!empty($id)) {

        $upload_dir = idea_get_upload_dir().FILES_SUBDIR;
        $file = $upload_dir.$id.'.json';

        if (is_file($file)) {
            // hack to prevent excessive JSON encoding
            header('Content-Type: application/json');
            if (get_option('v3d_cross_domain'))
                header('Access-Control-Allow-Origin: *');
            print_r(file_get_contents($file));
            exit();
        } else
            $response = new WP_REST_Response(array('error' => 'File not found'), 500);

    } else {

        $response = new WP_REST_Response(array('error' => 'Bad request'), 400);

    }

    /*if (get_option('v3d_cross_domain'))
        $response->header('Access-Control-Allow-Origin', '*');*/

    return $response;

}

add_action('rest_api_init', function () {

        register_rest_route('idea/v1', '/upload_file', array(
            'methods' => 'POST',
            'callback' => 'idea_api_upload_file',
        ));

        register_rest_route('idea/v1', '/get_file/(?P<id>\d+)', array(
            'methods' => 'GET',
            'callback' => 'idea_api_get_file',
            'args' => array(
                'id' => array(
                    'validate_callback' => function($param, $request, $key) {
                        return is_numeric($param);
                    }
                ),
            ),
        ));

});

所有文件都保存在“idea”文件夹中

function idea_get_upload_dir() {
    $upload_dir = wp_upload_dir()['basedir'].'/idea/';

    if (!is_dir($upload_dir)) {
        mkdir($upload_dir, 0777, true);
    }

    return $upload_dir;
}

但我不明白如何按顺序放置文件(管理面板)。请帮帮我

标签: phpwordpresswoocommerce

解决方案


推荐阅读