Мне нужно создать поле с возможностью выбрать несколько файлов определенного формата и загрузить их на сайт
Сохранив в метополе массив ссылок на каждый файл загруженный в этом поле.
Для того что бы потом вывести в любом файле темы.
Медиа-загрузчик WP-Recall и обычный загрузчик wordpress тут не подойдут.
Есть ли возможность как то это сделать?
Насколько я понял это инструкция для написания дополнения для wp-recall
Но могу ли я написать этот код в function.php своей темы?
add_filter('rcl_public_form_fields', 'add_public_form_field', 10, 2); function add_public_form_field($fields, $formData){ $fields[] = array( 'type' => 'custom', 'slug' => 'my_faile', 'title' => __('Массив файлов'), 'placeholder' => __('Загрузите желаемые файлы'), 'content'=>'<input type="file" id="file" name="file" multiple>' ); return $fields; }
Или все таки обязательно создавать именно плагин для wp-recall.
И все ли я правильно написал.
Любой плагин, дополнение - это функция или набор функций. Куда вы разместите и как оформите - ваше дело. Можно же сниппеты в файл функций размещать. Почему бы и нет?
правильно или нет - скажите вы. У вас заработало?
Подсмотреть можете и тут один из примеров использования: wp-recall/add-on/commerce/admin/pages/addon-settings.php
на 42-й строке
'content' => wp_dropdown_pages
- размещена ВП функция. Так что - если работает - сделали все верно.
правильно или нет - скажите вы. У вас заработало?
К сожалению нет я даже для проверки просто вставил из примера
вот такой код
add_filter('rcl_public_form_fields', 'add_public_form_field', 10, 2); function add_public_form_field($fields, $formData){ $fields[] = array( 'type' => 'textarea', 'slug' => 'your-comment', 'title' => __('Ваш комментарий'), 'placeholder' => __('Пишите, что хотите'), 'maxlength' => 200 ); return $fields; }
Но не одного нового поля в форме публикаций не добавилось.
Понятно я нашел его после мне нужно будет сделать так?
add_action( 'save_post', 'timeout_crete_ise', 10, 3); function save_faile($post_id, $post, $update) { if (!$update ) { $url = $_SERVER['DOCUMENT_ROOT'] . '/'.$server.'/wp-content/uploads/'; move_uploaded_file($_FILES ['failename']['tmp_name'], $url); update_post_meta(get_the_ID(), 'meta_name', $url); }}
что это?
save_post Событие которое происходит после сохранения поста
После я беру все файлы из глобальной переменой $_FILES и переношу их в папку uploads на вордпресе
А после сохраняю путь в метополе поста
В основном этот код я использовал для одиночных файлов но думаю общий принцип вроде тот же
Или есть вариант по проще для загрузки файлов на сайт и сохранения путей в метополе поста?
Окей а где и куда они сохраняются?
И как сохранить ссылки в виде массива в мето поле?
В медиа библиотеке файлов нет
add_filter('rcl_public_form_fields', 'add_public_form_field', 10, 2); function add_public_form_field($fields, $formData){ $fields[] = array( 'type' => 'custom', 'slug' => 'my_faile', 'title' => __('Масив файлов'), 'content'=>'<input type="file" id="file" name="file" multiple>' ); return $fields; }
Но они не где не сохраняются
Не один ни несколько файлов не сохраняются.
Я проверил все папки в uploads файлов нет.
И вообще что может сохранить
custom с контентом
<input type="file" id="file" name="file" multiple>?
Если это стороннее поле которые мы создали не в recall.
wp_insert_post - обновляет данные поста.
Что именно вы предполагаете мне обновить если wp-recall уже сам создает заголовки автора описание и так далее.
Единственное что есть полезное так это meta_input но я так и не понял чем он отличается от
update_post_meta(get_the_ID(), 'meta_name', $url);
то пишите свой обработчик
И да вы так и не ответили подойдет ли для этого обработчик save_post
add_action( 'save_post', 'timeout_crete_ise', 10, 3); function save_faile($post_id, $post, $update) { if (!$update ) { $url = $_SERVER['DOCUMENT_ROOT'] . '/'.$server.'/wp-content/uploads/'; move_uploaded_file($_FILES ['failename']['tmp_name'], $url); update_post_meta(get_the_ID(), 'meta_name', $url); }}
zeni1agent сказал(а)
Что именно вы предполагаете мне обновить
предлагаю обновить свои данные или сохранить новые
zeni1agent сказал(а)
И да вы так и не ответили подойдет ли
не заметил ранее такого вопроса, а вообще save_post можно использовать вместо wp_insert_post, но нежелательно.
а вообще save_post можно использовать вместо wp_insert_post, но нежелательно.
А чем нежелательно?
Просто сейчас я не совсем понимаю где именно и в чем применить wp_insert_post,
Просто wp_insert_post
Безопасно вставляет/обновляет запись в базе данных.
Что означает что он создает новую или обновляет текущую запись.
Но форма публикаций wp-recall уже создает новую запись.
И как обновить ново созданную запись мне не совсем понятно если
wp_insert_post в function.php будет работать постоянно.
И получается либо wp_insert_post будет обновлять все записи на которые я перейду
Либо он буде создавать новую запись постоянно.
// Создаем массив $post_data = array( 'post_title' => 'Заголовок записи', 'post_content' => 'Здесь должен быть контент (текст) записи.', 'post_status' => 'publish', 'post_author' => 1, 'post_category' => array(8,39) ); // Вставляем данные в БД $post_id = wp_insert_post( wp_slash($post_data) );
Так или иначе мне нужно поставить какое то условие по которому будет срабатывать
Но я знаю только единственное условие которое срабатывает после создания поста и это save_post
Можно конечно и через $_POST но я не знаю данных которые нужно получить
Или перехватить из recall
if($_POST['???']){ $post_data = array( 'post_title' => $_POST['???'], 'post_content' => $_POST['???'], 'post_status' => 'publish', 'post_author' => $_POST['???'], 'post_category' => $_POST['???'], 'meta_input' => array( 'failes'=> array(wp-content/uploads/2019/05/faile.faile,wp-content/uploads/2019/05/faile2.faile,wp-content/uploads/2019/05/faile3.faile,wp-content/uploads/2019/05/faile.faile4) ), ); $post_id = wp_insert_post( wp_slash($post_data) ); }
Можете пожалуйста объяснить.
Все теперь я понял но чем же он отличаться от save_post ?
add_action( 'save_post', 'action_function_name_85245', 10, 3 ); function action_function_name_85245( $post_ID, $post, $update ) { // Действие... }
$post_ID(строка)
ID записи, которая обновляется.
$post(объект)
Объект записи, которая обновляется. Объект такой же как обычно в глобальной переменной $post.
$update(логический)
true — это обновление записи.
false — это добавление новой записи.
add_action ( 'wp_insert_post' , 'action_function_name_1950' , 10 , 3 ) ; function action_function_name_1950 ( $ post_ID , $ post , $ update ) { // action ... }
$post_ID(число)
ID сообщения
$ post (WP_Post)
Опубликовать объект.
$ update (true / false)
Является ли это существующим сообщением, обновляемым или нет.
Можете сказать почему у меня не получается загрузить файл в папку
add_filter('rcl_public_form_fields', 'add_public_form_field', 10, 2); function add_public_form_field($fields, $formData){ $fields[] = array( 'type' => 'custom', 'slug' => 'my_faile', 'title' => __('Массив файлов'), 'content'=>'<input type="file" id="faile" name="faile[]" multiple>' ); return $fields; } add_action( 'wp_insert_post', 'arr_meta', 10, 3); function arr_meta($post_id, $post, $update) { if (!$update ) { $i = 0; foreach ($_FILES ['failename']['tmp_name'] as &$val) { $S3 = $_FILES ['failename']['tmp_name'][$i]; move_uploaded_file($S3, 'C:/xampp/htdocs/wor/wp-content/uploads/'. $_FILES['failename']['name'][$i]); $i++; } }}
На чистом php файле все работает как надо но внутри wp_insert_post и save_post нет.