Способ загрузки файла на свой WP сайт через POST запрос

Moved Other
  • Т к не всегда удобно юзать способ загрузки через FTP какого либо файла например на свой WP сайт , то в данном примере покажу как это сделать юзая POST запрос, что по моим тестам намного удобнее и работает быстрей и с меньшим количеством ошибок.

    В данном примере реализовано для загрузки webp файла (файл картинки в формате webp) на свой WP сайт.

    Но при желании можете переделать код и строки пост запроса под загрузку любого файла с нужным вам расширением.

    Вобщем в своей WP сайте, в файле вашей темы functions.php нужно добавить внизу строки кода .

    Но перед этим надо в приведённом коде поменять:

    • В коде нужно поменять vash_parol на вами желаемый пароль, который будете использовать в post запросе чтоб ваш сайт спрашивал пароль, а пост запрос отвечал этим паролем (это для минимальной безопасности нужно)

    • а также в коде нужно текст all_webp_images поменять на имя той папки (или текст пути, если конечная папка куда хочешь грузить картинку лежит не сразу ниже домена) на вашем сайте куда вы хотите что загрузился wepb файл картинки
      В моем примере в коде прописано что файл картинки будет сохраняться сразу в папку с именем all_webp_images которая лежит сразу после домена, то есть вот тут: https://доменсайта.ru/all_webp_images

    Код: для добавления в файл functions.php:

    add_action('init', 'handle_webp_upload_via_file');
    
    function handle_webp_upload_via_file() {
        // Проверяем, что в запросе есть ?action=upload_webp_file
        if ( isset($_GET['action']) && $_GET['action'] === 'upload_webp_file' ) {
    
            // 1. Проверяем "секрет"
            if ( !isset($_POST['secret']) || $_POST['secret'] !== 'vash_parol' ) {
                echo 'Error: wrong or empty secret!';
                exit;
            }
    
            // 2. Проверяем наличие имени файла (передаётся как $_POST['filename'])
            if ( !isset($_POST['filename']) || empty($_POST['filename']) ) {
                echo 'Error: no filename provided!';
                exit;
            }
            $filename = sanitize_file_name( $_POST['filename'] );
            // Если нет ".webp" — добавляем
            if ( strpos($filename, '.webp') === false ) {
                $filename .= '.webp';
            }
    
            // 3. Проверяем, что что-то пришло в $_FILES['myfile']
            if ( !isset($_FILES['myfile']) || $_FILES['myfile']['error'] !== UPLOAD_ERR_OK ) {
                echo 'Error: no file or upload error!';
                exit;
            }
    
            // Путь к папке
            $upload_dir = ABSPATH . 'all_webp_images/';
            if ( !file_exists($upload_dir) ) {
                @mkdir($upload_dir, 0755, true);
            }
    
            $filepath = $upload_dir . $filename;
    
            // move_uploaded_file — перемещаем загруженный файл
            $res = move_uploaded_file($_FILES['myfile']['tmp_name'], $filepath);
            if ($res) {
                echo 'Success! File saved as ' . $filename;
            } else {
                echo 'Error: cannot move uploaded file!';
            }
    
            exit;
        }
    }
    

    Далее нам надо юзать кубик post запроса с такими заполнениями полей:

    • url (всегда будет такой, поэтому в нём меняйте только на домен вашего сайта):
    https://доменсайта.ru/?action=upload_webp_file
    
    • ставим птичку "конструктор данных запроса"

    • Post Data (тут замените только vash_parol на ваш пароль что в коде также указали)

    "secret","vash_parol","filename",[[NAME]],"myfile","file://" + [[PYT]]
    

    где :

    • [[NAME]] будет стоять имя вашего webp файл картинки но без указания в переменой [[NAME]] расширения webp. После выполнения такого пост запроса отправляемая webp картинка будет лежать на сайте вот тут: https://доменсайта.ru/all_webp_images/[[NAME]].webp

    • в переменой [[PYT]] сохраняем строку пути к файлу webp картинки на вашем локальном компе, которую вы хотите загрузить на свой сайт

    тип содержимого:

    multipart
    

    рабочий заполненный пример (то что подчёркнуто нужно заменить на ваше):
    tghghghg.png

  • ModeratorM Moderator moved this topic from Off topic on