#php #wordpress #function #gravityforms
#php #wordpress #функция #gravityforms
Вопрос:
В настоящее время я пытаюсь решить проблему на своем сайте WordPress, используя Gravity Forms. Я пытаюсь заполнить выпадающее поле a в 3 разных формах списком пользователей, зависящих от их «сервиса», который указан в их метаданных. Например: Форма 1 показывает выпадающий список всех пользователей с «Сервисом 1», указанным в их метаданных, Форма 2 показывает выпадающий список всех пользователей с «Сервисом 2» в их метаданных.
Я нашел некоторый код в Интернете, который я вставил в свой Functions.php файл, который работает так, как я хочу, но только для 1 формы за раз. Я попытался изменить соответствующие идентификаторы / meta_values, и каждый раз, когда я сохраняю его, правильная форма обновляется, а остальные стираются.
Если я копирую и вставляю код для создания нескольких экземпляров, я получаю сообщение об ошибке, поскольку PHP не позволяет вызывать одну и ту же функцию несколько раз.
Мои знания PHP разумно ограничены, и я попытался измельчить его, чтобы добавить несколько операторов «if» на основе разных идентификаторов и $ metas, но пока безрезультатно. Кто-нибудь может посмотреть на код и увидеть очевидное решение?
Это код, который в настоящее время работает для 1 формы одновременно.
add_filter("gform_pre_render", "populate_userdrop");
add_filter("gform_admin_pre_render", "populate_userdrop");
function populate_userdrop($form){
if($form["id"] != 1)
return $form;
$items = array();
$metas = get_users(array(
'meta_value' => 'Service 1',
));
if (is_array($metas))
{
foreach($metas as $meta) $items[] = array("value" => $meta->display_name, "text" => $meta->display_name);
}
foreach($form["fields"] as amp;$field)
if($field["id"] == 1){
$field["choices"] = $items;
}
return $form;
}
Я пытался сократить это так, но пока я не могу заставить это работать
add_filter("gform_pre_render", "populate_userdrop");
add_filter("gform_admin_pre_render", "populate_userdrop");
function populate_userdrop($form){
$metas = get_users(array(
'meta_value' => 'Service 1',
));
$metas2 = get_users(array(
'meta_value' => 'Service 2',
));
if($form["id"] != 1)
return $form;
$items = array();
if (is_array($metas))
{
foreach($metas as $meta) $items[] = array("value" => $meta->display_name, "text" => $meta->display_name);
}
if($form["id"] != 2)
return $form;
$items = array();
if (is_array($metas2))
{
foreach($metas2 as $meta) $items[] = array("value" => $meta->display_name, "text" => $meta->display_name);
}
foreach($form["fields"] as amp;$field)
if($field["id"] == 1){
$field["choices"] = $items;
}
return $form;
}
Комментарии:
1.
switch case
-> php.net/manual/en/control-structures.switch.php2. Некоторые разумные отступы также значительно упростили бы чтение кода (и устранение неполадок)
3. Во-первых, это не WordPress, который не позволит вам иметь несколько функций с одинаковым именем в одной и той же области, это PHP. Во-вторых, ваш код не работает из-за того, что вы говорите ему делать. Вы говорите ему, что если
form["id"] != 1; return $form
, а затем далее говорите, еслиform["id"] != 2; return $form
так при создании форм, первая форма останавливается на второй, а вторая форма останавливается на первой. Вы должны быть в состоянии достичь этого сmeta_query