Домой Wp-Recall WP-Recall: Пишем свое дополнение и кастомизация Изменение опций поля в форме публикации
24ответ(ов) в теме
toka
не в сети 11 месяцев
На сайте с 01.10.2017
Участник
Тем 26
Сообщения 137
1
17:34
Версия WP-Recall: 16.24.38

Подскажите пожалуйста каким образом можно управлять опциями (Медиазагрузчик, HTML редактор, Визуальный редактор) поля формы публикации? Т.е. включить или выключить, но не из визуального настройщика в бакэнде, а из собственного дополнения. Вроде нутром чувствую, что надо использовать rcl_public_form_options но не пойму как.

0
Андрей CS
не в сети 6 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16476
2
17:50

для изменения полей непосредственно в форме публикации пробуйте использовать фильтр rcl_public_form_fields

0
toka
не в сети 11 месяцев
На сайте с 01.10.2017
Участник
Тем 26
Сообщения 137
3
17:54

Спасибо Андрей. Почитав мануал я понял, что надо реализовывать через rcl_public_form_fields, вот только не разберусь как задать именно Медиазагрузчик, HTML редактор, Визуальный редактор включенным или выключенным.

0
Андрей CS
не в сети 6 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16476
4
18:02

Думаю, следует прогнать все поля через цикл, найти нужное по его айдишнику и далее вносить изменения в массив его атрибутов.
На отображение кнопки загрузки влияет атрибут media_button
на визуальный редактор - tinymce

0
toka
не в сети 11 месяцев
На сайте с 01.10.2017
Участник
Тем 26
Сообщения 137
5
18:05

Андрей CS сказал(а)
Думаю, следует прогнать все поля через цикл,

А если не через цикл и сразу задать ID поля через услоивие если он известен?

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

это слабое место текущего АПИ - айдишник лежит внутри массива, а не в ключе, только искать в цикле

0
toka
не в сети 11 месяцев
На сайте с 01.10.2017
Участник
Тем 26
Сообщения 137
7
18:18

Т.е. такая конструкция

if($fields->slug=='post_content')
не прокатит?

0
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1611
8
18:20

Так вы можете заранее в своем коде сделать массив с нужными включенными особенностями и затем в поле перезаписать существующий массив с этими опциями.

т.е. если вы принудительно хотите в редакторе включить все 3 опции, то например так:


add_filter( 'rcl_public_form_fields', function($fields, $form){
  
  foreach($fields as &$field) {
	if($field['slug'] == 'post_content') {
	  $field['post-editor'] = array('media', 'html', 'editor');
	  break;
	}
  }
  return $fields;
  
}, 10, 2 );

1
Андрей CS
не в сети 6 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16476
9
18:23

не прокатит?

нет, $fields не объект какого то поля, а массив массивов с данными полей

Редакции сообщения
23.03.2021 18:24Андрей CSПричина: не указано
0
toka
не в сети 11 месяцев
На сайте с 01.10.2017
Участник
Тем 26
Сообщения 137
10
18:40

Preci

Не прокатило, похоже еже надо где то ID самой формы задавать, потому как после некоторых манипуляций в бакенде у меня они задублировались с ID1 и ID2 и теперь ID2 не удаляется средствами бакенда.

0
Андрей CS
не в сети 6 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16476
11
19:02

в предложенном коде идентификатор формы можно получить в третьем параметре фильтра, там объект с экземпляром класса формы

0
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1611
12
19:06

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

Вот там 3 параметра, 3ий - как уже написали объект с экземпляром класса формы

add_filter( 'rcl_public_form_fields', function($fields, $form, $formObj){

  if($formObj->form_id != 1 || $formObj->post_type != 'post') {
    return $fields;
  }

  foreach($fields as &$field) {
	if($field['slug'] == 'post_content') {
	  $field['post-editor'] = array('media', 'html', 'editor');
	  break;
	}
  }
  return $fields;
  
}, 10, 3 );

так например можно менять значения только формы с ID 1 для записей типа post

0
toka
не в сети 11 месяцев
На сайте с 01.10.2017
Участник
Тем 26
Сообщения 137
13
19:14

Preci сказал(а)
if($formObj->form_id != 1 || $formObj->post_type != 'post')

А точно так? может:
if($formObj->form_id != 1 || $form->post_type != 'post')

0
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1611
14
19:20

Можно и так и так

0
toka
не в сети 11 месяцев
На сайте с 01.10.2017
Участник
Тем 26
Сообщения 137
15
19:24

Я правильно понимаю, что $field['post-editor'] = array('media', 'html', 'editor'); отображает три настройки редактора но при этом не задает их включение или отключение? И в случае array('html') 'media' и 'editor' просто не отобразятся?

0
toka
не в сети 11 месяцев
На сайте с 01.10.2017
Участник
Тем 26
Сообщения 137
16
19:28

Примененная мной конструкция

add_filter('rcl_public_form_fields','init_options',10,3);
function init_options($fields,$form,$id){
  if($form->post_type != 'notepad_notes' || $id->form_id != 1) return $fields;
  foreach($fields as &$field) {
	if($field['slug'] == 'post_content') {
	  $field['post-editor'] = array('html');
	  break;
	}
  }
  return $fields;
}

не срабатывает 🙁

0
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1611
17
19:33

У меня работает ваш код.

Попробуйте так

add_filter('rcl_public_form_fields','init_options',10,3);
function init_options($fields,$form,$id){
  if($form->post_type != 'notepad_notes' || $id->form_id != 1) return $fields;
  foreach($fields as $k => $field) {
	if($field['slug'] == 'post_content') {
	  $fields[$k]['post-editor'] = array('html');
	  break;
	}
  }
  return $fields;
}

Редакции сообщения
23.03.2021 19:33PreciПричина: не указано
1
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1611
18
19:36

Еще приоритет можете попробовать повысить, заменить 10 на 100 например

Если ничего не поможет - тогда надо смотреть что верно сверяется slug, тип поста, id формы - может у вас выводится не то что вы фильтруете.

Через var_dump(); можете посмотреть срабатывает ли вообще фильтр, сверить значения до / после цикла. Вообщем подебажить

0
toka
не в сети 11 месяцев
На сайте с 01.10.2017
Участник
Тем 26
Сообщения 137
19
19:37

Preci

Все разобрался. Я проверял при этом отображение настроек формы в бакэнде и там то они не менялись, а вот во фронтенде все оказывается ОК. Всем спасибо за помощь.
P.S. Остался вопрос почему этот код за одно и в бакенде не меняет визуализацию настроек.

Редакции сообщения
23.03.2021 19:43tokaПричина: Ошибка
0
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1611
20
19:44

Ну он и не должен в настройках ничего менять. Вы же сказали вам принудительно в форме надо изменить настройки.

Если надо и в менеджере менять - то возможно этот фильтр подойдет

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

Но юзер сможет изменить значения, если и от этого надо защититься - то надо искать, думаю есть за что зацепиться при сохранении опция и подменить значения на нужные

0
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1611
21
19:46

Вот есть фильтр где можно отредактировать настройки формы перед сохранением изменений

Вы не можете просматривать опубликованные ссылки
0
toka
не в сети 11 месяцев
На сайте с 01.10.2017
Участник
Тем 26
Сообщения 137
22
19:47

Preci

Вообще было бы неплохо синхронизировать настройки поля из кастома как в баке так и фронте.

0
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1611
23
19:52

Эм, они и так синхронизированы.

Вы можете контролировать их изменение через хуки, которые срабатывают при выводе настроек / сохранении настроек

А можете на лету менять, например для каждого пользователя свои настройки делать, в зависимости от роли или еще чего

0
toka
не в сети 11 месяцев
На сайте с 01.10.2017
Участник
Тем 26
Сообщения 137
24
20:02

Еще раз спасибо всем за дельные советы. Тему можно закрывать.

0
Вы не имеете права на публикацию сообщений в этой теме