#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′]
Жаль, что я не нашел это до того, как потратил на это целый день. Лол… Вот мои шаги после этого:
-
Я экспортировал / импортировал форму Gravity на другой сайт в multisite, который использовал ту же тему (поэтому я не работал над двумя разными
functions.php
файлами; вот почему идентификатор блога и идентификатор Gravity Forms отличаются ниже). -
Я удалил все функции, которые я изначально создал в
functions.php
файле, который я указал ранее. (populate_lead_source_detail
,populate_lifecycle_status
и т.д.) -
Я создал переменные из полей 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'); ?> -
Я вызвал переменные в коротком коде. (Смотрите ниже мой окончательный код.)
<?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(); ?>