Домой Wp-Recall WP-Recall: Вопросы и ответы Произвольные пользовательские поля
22ответ(ов) в теме
Prinz
не в сети 2 недели
На сайте с 07.09.2024
Участник
Тем 1
Сообщения 12
1
12:05
Версия WP-Recall: 16.26.9

Добрый день! Хотел бы обратиться за помощью. Есть кулинарный сайт и сейчас я реализовываю форму публикации рецептов для посетителей через "Форму публикации" WR-Recall. На сайте используется шаблон и при активации дополнения PublicPost в форму автоматически подгрузились некоторые поля (скриншот 1) с шаблона темы. Получается, что не все из них мне необходимы и я их убрал, а некоторые из тех, что есть работают не так как мне нужно, в связи с чем я решил эти поля переделать через произвольные пользовательские поля. Поля которые я переделываю это "Ингредиенты" и "Шаги", в админке сайта в редакторе публикация они выглядят так (скриншот 2 и 3), такой же функционал я пытаюсь сделать через форму публикации произвольных пользовательских полей.

Поле "Ингредиенты" я сделал через данный код и в публичной форме публикации на сайте оно выглядит так (скриншот 4):
add_filter('rcl_public_form_fields', 'add_public_form_field', 2, 2);
function add_public_form_field($fields, $formData){
$fields[] = array(
'type' => 'custom',
'slug' => 'ingredients',
'title' => 'Ингредиенты:',
'content' => '
Функциональность кнопок я сделал через Jquery, они добавляют новый блок и соответственно удаляют.

Поле "Шаги" я сделал по такому же принципу, только "type" графы "Фото" указал "file" и в публичной форме публикации на сайте поле "Шаги" выглядит так (скриншот 5)

И вот с чем я бы хотел попросить у вас помощи. Дело в том, что в форме публикации при заполнении я могу заполнить все графы (скриншот 6), но при опубликовывании работают только графы (скриншот 7), которые автоматически подгрузились с шаблона при установке дополнения ( скриншот 1).

Можете подсказать в чем может быть проблема, почему мои произвольные поля не работают при публикации, может я что-то упустил, может какой-то момент с регистрацией этих полей?

Суть в том, что мне нужно сделать так, чтобы данные поля работали, и (может быть?) привязать мои произвольные пользовательские поля "Ингредиенты" и "Шаги" к тем полям, которые устанавливаются шаблоном. То есть, чтобы после того как я опубликую материал через данную форму, эти два поля выглядели и регистрировались в системе также, как как будто бы, я сделал публикацию через админку.

Буду благодарен за любую помощь!

Скриншоты:

Вы не можете просматривать опубликованные ссылки
0
Андрей CS
не в сети 8 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16915
2
12:32

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

add_action('update_post_rcl','save_fielddata_publicform',10,2);
function save_fielddata_publicform($post_ID, $postdata){
    global $wpdb;
    if($postdata['post_type']!='custom-type') return false;
    
    if(isset($_POST['name-field'])) $field = $_POST['name-field'];
    else $field = 0;
    
    update_post_meta($post_ID,'name-field',$field);
}

0
Prinz
не в сети 2 недели
На сайте с 07.09.2024
Участник
Тем 1
Сообщения 12
3
14:40

Спасибо за указание направления, я так и думал, что упускаю какой-то момент!

В статье я увидел шорткод [public-form post_type='custom-type'], но на данный момент у меня все выводится через шорткод [public-form post_type="post"], если я ставлю первый шорткод, то соответственно в форме остаются только кастомные поля, имеет ли значение через какой шорткод выводит, то есть могу ли я оставить как есть и кастомные поля и поля предлагаемые дополнением PublicPost и выводить их вместе шорткодом [public-form post_type="post"] или мне все поля необходимо переделать в кастомные и выводит через [public-form post_type='custom-type']?

Еще хотел бы уточнить, на примере кастомного поля "Ингредиенты" и графы "Наименование ингредиента". Если я ввожу наименование ингредиента в свое кастомное поле, получается мне нужно связать это поле с полем, которое отвечает за "Наименование ингредиента" при публикации из админки? Или мне нужно сделать так, чтобы информация из моего кастомного поля поступала туда же куда поступает информация из "Наименование ингредиента", которая находится в админке?

0
Андрей CS
не в сети 8 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16915
4
15:30

Про шорткод не совсем понял, с каким типом записи работаете такое указание post_type там и используете.
Если вы хотите полноценно соединить поля из админки и в форме публикации, то вам необходимо сохранять данные также как они сохраняются через поля шаблона. Я бы посмотрел куда и в каком виде сохраняет шаблон данные из своих полей и сделал также в форме публикации при сохранении данных. Соответственно при построении формы публикации достал бы данные из БД и заполнил поля в форме публикации. Тогда у вас получится верно редактировать данные как через форму публикации так и через админку

0
Prinz
не в сети 2 недели
На сайте с 07.09.2024
Участник
Тем 1
Сообщения 12
5
16:25

Спасибо за ответ, сейчас как раз и занимаюсь поиском по БД!

0
Prinz
не в сети 2 недели
На сайте с 07.09.2024
Участник
Тем 1
Сообщения 12
6
13:24

Добрый день! Хотел бы ещё раз обратить за помощью.

Дело в том, что в моем кастом поле есть строка "Наименование ингредиента", для примера я убрал из данного кода другие строки и выглядит он так:

 add_filter('rcl_public_form_fields', 'add_public_form_field', 2, 2);
function add_public_form_field($fields, $formData){
    $fields[] = array(
        'type' => 'custom',
        'slug' => 'ingredientss',
        'title' => 'Ингредиенты:',
        'content' => '
<ul class="ingredients-block">
<li>
<div class="shell">
<div class="shell-block-1">Название ингредиента</div>
<div class="shell-block-1"></div>
</div>
<div class="shell">
</div>

</li>
</ul>
'
    );
    return $fields;
}

Код почему-то не вставляем в форму целиком. Прикладываю скриншот:

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

По БД я узнал, что шаблон информацию из своего поля "Наименование ингредиента" сохраняет под meta_key: recipe_ingredients

Но дело в том, что сколько бы я шагов не добавлял в данное поле при публикации из шаблона и какие бы значения я там не указывал, найти их по БД не удается. Я могу увидеть только информацию о названии первого ингредиента.

Все же я решил сделать сохранение информации из своего кастомного поля "Наименование ингредиента" и код выглядит вот так:

add_action('update_post_rcl','save_fielddata_publicform',10,2);
function save_fielddata_publicform($post_ID, $postdata){
    global $wpdb;
    if($postdata['post_type']!='custom-type') return false;
    
    if(isset($_POST['ingredients-name[]'])) $field = $_POST['recipe_ingredients'];
    else $field = 0;
    
    update_post_meta($post_ID,'recipe_ingredients',$field);
}

Но у меня ничего не получилось. Информация из моего поля не сохраняется.

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

Форму я выводил как таким шорткодом [public-form post_type="post"], так и [ public-form post_type='custom-type' ]

0
Андрей CS
не в сети 8 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16915
7
16:42

видимо так будет правильнее

if(isset($_POST['ingredients-name'])) $field = $_POST['ingredients-name'];

и тут
if($postdata['post_type']!='custom-type') return false;

post_type должен быть такой же какой указан в шорткоде
custom-type это вообще для примера указано, это указание СУЩЕСТВУЮЩЕГО типа записи на сайте, в вашем случае, наверное надо указывать post, ну или тот тип записи с которым вы работаете

0
Prinz
не в сети 2 недели
На сайте с 07.09.2024
Участник
Тем 1
Сообщения 12
8
17:27

Я исправил как вы сказали, но теперь при опубликовывании происходит критическая ошибка, вернее написано на странице, но при этом все остальное кликабельно.
Скриншот ошибки:

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

Подобное происходит и при публикации через шаблон в админке

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

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

0
Prinz
не в сети 2 недели
На сайте с 07.09.2024
Участник
Тем 1
Сообщения 12
10
10:47

Добрый день! Ошибку исправил, помогла смена PHP на более раннюю версию.

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

Дело в том, что есть если, я делаю публикацию из админки это выглядит вот так:

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

При публикации это выглядит вот так:

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

Все отображается в своих контейнерах.

По БД записывают в meta_key: recipe_ingredients
С meta_value:

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

Мои кастомные поля имеют такие же имена: ingredients-name[],ingredients-count[],ingredients-text[]

При публикации через форму это выглядит вот так:

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

И именно на этом моменте получается проблема. Дело в том, что по БД информация записывается также в meta_key: recipe_ingredients, но meta_value уже почему-то выглядит вот так:

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

То есть получается, что первые два значения не записывают информацию в БД, а то что записывает не записывается как тот тип информации под которым должен записываться. То есть в БД поступает информация только с ingredients-text[], но не сохраняется там под значением "text". Сам код записи информации выглядит вот так:

add_action('update_post_rcl','save_fielddata_publicform',10,2);
function save_fielddata_publicform($post_ID, $postdata){
    global $wpdb;
    if($postdata['post_type']!='post') return false;
    
    if(isset($_POST['ingredients-name'])) $field = $_POST['ingredients-name'];
    else $field = 0;
    
    update_post_meta($post_ID,'recipe_ingredients',$field);
    
     if(isset($_POST['ingredients-count'])) $field = $_POST['ingredients-count'];
    else $field = 0;
    
    update_post_meta($post_ID,'recipe_ingredients',$field);
    
     if(isset($_POST['ingredients-text'])) $field = $_POST['ingredients-text'];
    else $field = 0;
    
    update_post_meta($post_ID,'recipe_ingredients',$field);
}

Также интересная вещь происходит в том, что кастомное поле при публикации может отображать только цифры:

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

Но если я ввожу туда текст, то получается вот это:

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

По БД получается тоже самое:

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

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

_
Также хотел узнать по поводу загрузчика файлов в кастомное поле. У меня есть поле type="file", файл я могу приложить, но он никуда не загружается. Я читал статью по Uploader и правильно ли понимаю, что необходимо создать кастомный uploader и связать его с полем type="file", только я не нашел информацию о том, как это можно сделать? Или существует другой способ сделать, чтобы загрузит на сайт файл через поле type="file"?

Прощу прошения за такое количество, возможно глупых, вопросов. Очень хочется разобраться как это работает. Буду благодарен любую помощь в данных вопросах!

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

Prinz сказал(а)
И именно на этом моменте получается проблема. Дело в том, что по БД информация записывается также в meta_key: recipe_ingredients, но meta_value уже почему-то выглядит вот так

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

Prinz сказал(а)
Также интересная вещь происходит в том, что кастомное поле при публикации может отображать только цифры

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

Prinz сказал(а)
Также хотел узнать по поводу загрузчика файлов в кастомное поле.

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

0
Prinz
не в сети 2 недели
На сайте с 07.09.2024
Участник
Тем 1
Сообщения 12
12
16:56

Спасибо за подсказку!

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

Дело в том, что если я использую стандартное поле файлового загрузчика, то загружаемое изображение он устанавливает как обложку записи. А мое кастомное поле выглядит вот так:

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

Я хочу сделать так, чтобы у меня в кастомном поле был и загрузчик изображения и текстовое поле, в котором можно писать что угодно. Вот я и хочу понять, как это можно сделать. При создании кастомной формы одно поле я сделал type="text" для текста, а для второе type="file" для изображений. Так вот как это поле type="file" связать с медиазагрузчиком?

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

произвольное поле с типом "файл" не должно устанавливать обложку, просто создайте его в форме публикации

Вы не можете просматривать опубликованные ссылки
0
Prinz
не в сети 2 недели
На сайте с 07.09.2024
Участник
Тем 1
Сообщения 12
14
18:18

Это не совсем то

Если я создаю его так как на вашем скриншоте, то в форме публикации оно становится отдельным полем (выделил зеленым прямоугольником). А мне нужно сделать так, что оно было внутри кастомного поля (выделил зеленой стрелочкой куда хочу его поместить)

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

Можно ли такое реализовать, чтобы загрузчик был в динамическом кастомном поле?

0
Андрей CS
не в сети 8 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16915
15
19:47

в теории это возможно, но придется решать проблему инициализации этих полей на стороне js
у вас поле выглядит, да и работает не так как должно, пробуйте перед формой вызвать нужные скрипты через функцию rcl_fileupload_scripts();
чтобы верно работать с этим полем следует понимать алгоритм его работы
загрузка через поле загружает файл во временную галерею, а в скрытом поле формы, сразу после этого сохраняет идентификатор сохраненного файла, при отправке данных с этой формы через submit вы можете в своем обработчике перехватить идентификатор загруженного файла и обработать его так как вам надо - прикрепить его к нужной сущности
поэтому тут важно что именно у вас происходит в форме и какой html формируется

0
Prinz
не в сети 2 недели
На сайте с 07.09.2024
Участник
Тем 1
Сообщения 12
16
21:40

Буду пробовать, спасибо большое за помощь и подсказки!

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

как вариант, вы можете не использовать функционал файлового загрузчика плагина, а использовать простой input типа file, но тогда вам придется реализовать логику загрузки файла при сохранении данных с формы самостоятельно

0
Prinz
не в сети 2 недели
На сайте с 07.09.2024
Участник
Тем 1
Сообщения 12
18
08:06

Спасибо за помощь, буду пробовать!

0
Prinz
не в сети 2 недели
На сайте с 07.09.2024
Участник
Тем 1
Сообщения 12
19
12:51

Добрый день! Подскажите, пожалуйста, в каком файле можно посмотреть код, который записывает информацию из полей в БД?

Скриншот полей, которые я имею ввиду:

Вы не можете просматривать опубликованные ссылки
0
Андрей CS
не в сети 8 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16915
20
18:54

если я верно понял, то здесь

Вы не можете просматривать опубликованные ссылки
0
Prinz
не в сети 2 недели
На сайте с 07.09.2024
Участник
Тем 1
Сообщения 12
21
11:12

Добрый день! Спасибо!

Хотел бы ещё узнать такой момент, что когда я захожу в форму публикации, плагин автоматически подтягивает определенные поля. В моем случае он подтянул это поле (Зеленым на скриншоте):

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

А в каком файле можно посмотреть код создания именно этого поля?

___

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

add_filter( 'rcl_field_options', 'rcl_edit_field_options', 10, 3 );
function rcl_edit_field_options( $options, $field, $manager_id ) {

Или какая-то еще?

И правильно ли я понимаю, что обработка того поля, которые я прикрепил на скриншоте происходит в том файле, ссылку на который вы отправили? Или я могу посмотреть в каком-то другом файле код обработки и запись информацию в БД именно из того поля, которое я прикрепил на скриншоте? Очень бы хотелось найти код обработки и записи данных именно этого поля)

Можно ли узнать обо всем этом подробнее? Буду очень благодарен за вашу помощь!

0
Андрей CS
не в сети 8 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16915
22
14:26

поля формы публикации формируются в классе

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

поле таксономий формируется на строке 266

термины таксономии из указанного поля сохраняются тут

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