Мультисайт — передача значений ACF с текущего сайта в форму Gravity Forms с другого сайта на мультисайте

#php #wordpress #advanced-custom-fields #multisite #gravityforms

#php #wordpress #расширенные пользовательские поля #мультисайт #gravityforms

Вопрос:

Я пытаюсь передать данные из предварительных пользовательских полей в мою форму Gravity Forms. Проблема, с которой я сталкиваюсь, заключается в том, что форма генерируется с другого сайта на мультисайте через:

 <?php switch_to_blog(1);?>   
     <?php echo do_shortcode( '[gravityform id="3" title="false" 
     description="false"]' ); ?>
<?php restore_current_blog(); ?>
  

В моем functions.php файле (как для блога 1, так и для текущего сайта) у меня есть:

 add_filter( 'gform_field_value_lead_source_detail', 'populate_lead_source_detail' );
function populate_lead_source_detail( $value ) {

   $leadsourcedetail = get_field('lead_source_detail', $post->ID);
   return $leadsourcedetail;
}

add_filter( 'gform_field_value_lifecycle_status', 'populate_lifecycle_status' );
function populate_lifecycle_status( $value ) {
   $lifecycle = get_field('lifecycle_status', $post->ID);
   return $lifecycle;
}

add_filter( 'gform_field_value_lead_source', 'populate_lead_source' );
function populate_lead_source( $value ) {
   $leadsource = get_field('lead_source', $post->ID);
   return $leadsource;
}

add_filter( 'gform_field_value_channel', 'populate_channel' );
function populate_channel( $value ) {
   $channel = get_field('channel', $post->ID);
   return $channel;
}

add_filter( 'gform_field_value_expected_op_type', 'populate_expected_op_type' );
function populate_expected_op_type( $value ) {
   $expected = get_field('expected_op_type', $post->ID);
   return $expected;
}
  

Поля ACF отлично работают в блоге 1, откуда генерируется форма Gravity, но я не могу заставить их передавать данные в форму в текущем текущем блоге.

Чтобы убедиться, что поля ACF работают (в целом), я протестировал <?php the_field(); ?> для каждого из них, и данные определенно есть… итак, я предполагаю, что это как-то связано с тем фактом, что я извлекаю форму с другого сайта на multisite.

У кого-нибудь есть идеи о том, как передать данные с моего текущего сайта в форму blog 1? Заранее спасибо!

Ответ №1:

Сохраните свои данные с помощью опций, а затем попробуйте получить к ним доступ.

Сайт 1 -> Site1_only_plugin -> Site1_only_plugin_function()-> add_option( ‘Site1_only_plugin_option’, $ var )

Вам следует обратиться к комментарию Брента Ливитта по ссылке ниже. Вот где я нашел это.

https://developer.wordpress.org/reference/functions/switch_to_blog/

Вероятно, это то, что вам нужно.

Надеюсь, это поможет.

Комментарии:

1. Интересный способ сделать это. Я поиграю с этой идеей и посмотрю, смогу ли я заставить ее работать.

2. К сожалению, я не смог заставить его работать таким образом. Он продолжал пытаться получить информацию из блога 1 вместо текущего блога — даже с настройкой ее в настройках. Единственный способ заставить это работать — это ввести точный числовой идентификатор блога в функцию, но каждый сайт будет использовать информацию из любого идентификатора блога, который я ввел вручную. Однако я понял это по-другому. В любом случае спасибо! 🙂

Ответ №2:

Я сделал это совершенно другим способом. Нашел это в документах Gravity Forms:https://docs.gravityforms.com/using-dynamic-population / — под шорткодами:

[gravityform id=1 field_values=’parameter_name1=value1amp;parameter_name2=value2′]

Жаль, что я не нашел это до того, как потратил на это целый день. Лол… Вот мои шаги после этого:

  1. Я экспортировал / импортировал форму Gravity на другой сайт в multisite, который использовал ту же тему (поэтому я не работал над двумя разными functions.php файлами; вот почему идентификатор блога и идентификатор Gravity Forms отличаются ниже).

  2. Я удалил все функции, которые я изначально создал в functions.php файле, который я указал ранее. ( populate_lead_source_detail , populate_lifecycle_status и т.д.)

  3. Я создал переменные из полей ACF для этой страницы.

    <?php $lead_source_detail = get_field('lead_source_detail');
    $lifecycle_status = get_field('lifecycle_status');
    $lead_source = get_field('lead_source');
    $channel = get_field('channel');
    $expected_op_type = get_field('expected_op_type'); ?>

  4. Я вызвал переменные в коротком коде. (Смотрите ниже мой окончательный код.)

                     <?php switch_to_blog(11);?>   
    
                        <?php echo do_shortcode( '[gravityform id="1" title="false" description="false" field_values="lead_source_detail='.$lead_source_detail.'amp;lifecycle_status='.$lifecycle_status.'amp;lead_source='.$lead_source.'amp;channel='.$channel.'amp;expected_op_type='.$expected_op_type.'"]' ); ?>
    
                    <?php restore_current_blog(); ?>