Домой Wp-Recall WP-Recall: Пишем свое дополнение и кастомизация Можно ли и как создать поле input type="file" multiple в Форме публикаций?
34ответ(ов) в теме
zeni1agent
не в сети 5 лет
На сайте с 23.09.2018
Участник
Тем 22
Сообщения 109
1
16:32
Версия WP-Recall: 16.1.5

Мне нужно создать поле с возможностью выбрать несколько файлов определенного формата и загрузить их на сайт
Сохранив в метополе массив ссылок на каждый файл загруженный в этом поле.
Для того что бы потом вывести в любом файле темы.
Медиа-загрузчик WP-Recall и обычный загрузчик wordpress тут не подойдут.
Есть ли возможность как то это сделать?

0
Вова (Otshelnik-Fm)
не в сети 9 часов
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18647
2
16:39

Здравствуйте.

Теоретически - да.
Смотрите:

Вы не можете просматривать опубликованные ссылки

На данный момент, существуют следующие типы полей:

custom - произвольное содержимое

вот и воспользуйтесь полем "custom" и напишите туда свой загрузчик.

0
zeni1agent
не в сети 5 лет
На сайте с 23.09.2018
Участник
Тем 22
Сообщения 109
3
17:08

Насколько я понял это инструкция для написания дополнения для 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.
И все ли я правильно написал.

Редакции сообщения
09.05.2019 17:11zeni1agentПричина: не указано
0
Вова (Otshelnik-Fm)
не в сети 9 часов
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18647
4
17:21

Любой плагин, дополнение - это функция или набор функций. Куда вы разместите и как оформите - ваше дело. Можно же сниппеты в файл функций размещать. Почему бы и нет?
правильно или нет - скажите вы. У вас заработало?

Подсмотреть можете и тут один из примеров использования: wp-recall/add-on/commerce/admin/pages/addon-settings.php на 42-й строке
'content' => wp_dropdown_pages- размещена ВП функция. Так что - если работает - сделали все верно.

0
zeni1agent
не в сети 5 лет
На сайте с 23.09.2018
Участник
Тем 22
Сообщения 109
5
17:37

правильно или нет - скажите вы. У вас заработало?

К сожалению нет я даже для проверки просто вставил из примера
вот такой код

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;
    
}

Но не одного нового поля в форме публикаций не добавилось.

0
Вова (Otshelnik-Fm)
не в сети 9 часов
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18647
6
17:54

у меня добавилось

Вы не можете просматривать опубликованные ссылки

значит не туда добавляете? Почитайте "Куда мне вставить этот код? (и стили)"

Вы не можете просматривать опубликованные ссылки
0
zeni1agent
не в сети 5 лет
На сайте с 23.09.2018
Участник
Тем 22
Сообщения 109
7
18:11

значит не туда добавляете?

Я код добавил в function.php в самый конец но у меня нечего не вывелось
null

0
Андрей CS
не в сети 13 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16861
8
18:17

указанный код добавляем поле в готовую форму публикации, а не в менеджер формы публикации

0
zeni1agent
не в сети 5 лет
На сайте с 23.09.2018
Участник
Тем 22
Сообщения 109
9
18:34

Понятно я нашел его после мне нужно будет сделать так?

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); 

}}

0
Вова (Otshelnik-Fm)
не в сети 9 часов
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18647
10
18:37

что это?

0
zeni1agent
не в сети 5 лет
На сайте с 23.09.2018
Участник
Тем 22
Сообщения 109
11
18:43

что это?

save_post Событие которое происходит после сохранения поста
После я беру все файлы из глобальной переменой $_FILES и переношу их в папку uploads на вордпресе
А после сохраняю путь в метополе поста
В основном этот код я использовал для одиночных файлов но думаю общий принцип вроде тот же
Или есть вариант по проще для загрузки файлов на сайт и сохранения путей в метополе поста?

Редакции сообщения
09.05.2019 18:44zeni1agentПричина: не указано
0
zeni1agent
не в сети 5 лет
На сайте с 23.09.2018
Участник
Тем 22
Сообщения 109
12
20:15

Или rcl_public_form_fields сам сохраняет в свое метополе?

0
Андрей CS
не в сети 13 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16861
13
20:39

добавляйте поле через фильтр rcl_default_public_form_fields, тогда значение этого поля будет сохраняться автоматически

0
zeni1agent
не в сети 5 лет
На сайте с 23.09.2018
Участник
Тем 22
Сообщения 109
14
21:07

Окей а где и куда они сохраняются?
И как сохранить ссылки в виде массива в мето поле?

В медиа библиотеке файлов нет


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;
    
}

Редакции сообщения
09.05.2019 21:10zeni1agentПричина: не указано
0
Вова (Otshelnik-Fm)
не в сети 9 часов
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18647
15
21:16

zeni1agent сказал(а)
Окей а где и куда они сохраняются?

кто? поля или файлы?
Поля должны в метакей поста - это функционал вордпресс. А прикрепленные изображения в медиабиблиотеку и в ту директорию что у вас настроена для файлов: wp-content/uploads/2019/05/ например

0
zeni1agent
не в сети 5 лет
На сайте с 23.09.2018
Участник
Тем 22
Сообщения 109
16
21:25

Но они не где не сохраняются
Не один ни несколько файлов не сохраняются.
Я проверил все папки в uploads файлов нет.
И вообще что может сохранить
custom с контентом

<input type="file" id="file" name="file" multiple>
?
Если это стороннее поле которые мы создали не в recall.

Редакции сообщения
09.05.2019 21:28zeni1agentПричина: не указано
09.05.2019 21:28zeni1agentПричина: не указано
09.05.2019 21:37zeni1agentПричина: не указано
0
zeni1agent
не в сети 5 лет
На сайте с 23.09.2018
Участник
Тем 22
Сообщения 109
17
09:03

Может я чего то не понимаю
или тег form в wp-recall перехватывает все файлы находящиеся внутри формы.
Тогда можете сказать что я сделал не так и почему у меня файлы не загружаются.
И куда и где они сохраняются автоматически.

0
Андрей CS
не в сети 13 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16861
18
09:38

Андрей CS сказал(а)
добавляйте поле через фильтр rcl_default_public_form_fields

для сохранения файла используйте поле типа file, оно будет сохранять только один файл, если надо сохранять несколько через поле custom, то пишите свой обработчик и вешайте его на хук wp_insert_post

0
zeni1agent
не в сети 5 лет
На сайте с 23.09.2018
Участник
Тем 22
Сообщения 109
19
10:48

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); 

}}

Редакции сообщения
10.05.2019 10:48zeni1agentПричина: не указано
0
Андрей CS
не в сети 13 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16861
20
11:23

zeni1agent сказал(а)
Что именно вы предполагаете мне обновить

предлагаю обновить свои данные или сохранить новые

zeni1agent сказал(а)
И да вы так и не ответили подойдет ли

не заметил ранее такого вопроса, а вообще save_post можно использовать вместо wp_insert_post, но нежелательно.

0
zeni1agent
не в сети 5 лет
На сайте с 23.09.2018
Участник
Тем 22
Сообщения 109
21
12:08

а вообще 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) );
}

Можете пожалуйста объяснить.

0
Андрей CS
не в сети 13 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16861
22
12:10

я имел ввиду хук wp_insert_post, а не функцию

0
zeni1agent
не в сети 5 лет
На сайте с 23.09.2018
Участник
Тем 22
Сообщения 109
23
12:21

Все теперь я понял но чем же он отличаться от 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)
Является ли это существующим сообщением, обновляемым или нет.

0
zeni1agent
не в сети 5 лет
На сайте с 23.09.2018
Участник
Тем 22
Сообщения 109
24
16:30

Можете сказать почему у меня не получается загрузить файл в папку

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 нет.

0
Андрей CS
не в сети 13 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16861
25
16:43

вы проверьте есть ли у вас вообще что то в $_FILES ['failename']? подозреваю что нет.
А вот в $_FILES ['faile'] может что то и будет

0
zeni1agent
не в сети 5 лет
На сайте с 23.09.2018
Участник
Тем 22
Сообщения 109
26
16:54

Я проверял print_r($_FILES);
И она пуста в чем причина?

0
Андрей CS
не в сети 13 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16861
27
17:15

видимо в форме публикации отсутствует необходимый атрибут enctype="multipart/form-data"

0
zeni1agent
не в сети 5 лет
На сайте с 23.09.2018
Участник
Тем 22
Сообщения 109
28
17:21

видимо в форме публикации отсутствует необходимый атрибут
enctype="multipart/form-data"

Нет он есть
null

Редакции сообщения
10.05.2019 17:23zeni1agentПричина: не указано
10.05.2019 17:23zeni1agentПричина: не указано
0
Андрей CS
не в сети 13 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16861
29
17:28

значит данные должны передаваться без проблем

0
zeni1agent
не в сети 5 лет
На сайте с 23.09.2018
Участник
Тем 22
Сообщения 109
30
17:41

значит данные должны передаваться без проблем

Но почему то они не передаются.
Весь код который я использовал я написал чуть выше сообщение 24
На чистом php все работает как надо.
В чем может быть причина?

0
Тема закрыта. Публикация новых сообщений запрещена.