Создание условных выражений в одной и той же функции PHP

#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.php

2. Некоторые разумные отступы также значительно упростили бы чтение кода (и устранение неполадок)

3. Во-первых, это не WordPress, который не позволит вам иметь несколько функций с одинаковым именем в одной и той же области, это PHP. Во-вторых, ваш код не работает из-за того, что вы говорите ему делать. Вы говорите ему, что если form["id"] != 1; return $form , а затем далее говорите, если form["id"] != 2; return $form так при создании форм, первая форма останавливается на второй, а вторая форма останавливается на первой. Вы должны быть в состоянии достичь этого с meta_query