#gravity-forms-plugin #gravityforms
#gravity-forms-плагин #gravityforms
Вопрос:
Итак, что я хочу иметь возможность сделать, это взять значение поля, поле даты, и добавить к нему установленный период времени, а затем превратить это в тег слияния, который я затем могу добавить обратно в это значение или использовать где-либо еще.
Я знаю, как создать новый тег слияния, проблема не в этом. Мой вопрос в том, как мне получить значение поля для использования в этом расчете?
add_filter( 'gform_replace_merge_tags', 'new_date_plus_30', 10, 7 );
function new_date_plus_30( $text, $form, $entry, $url_encode, $esc_html, $nl2br, $format ) {
$merge_tag = '{date_plus_30}';
$new_date = date('m/d/Y', strtotime(' 30 days'));
return str_replace( $merge_tag, $new_date, $text );
}
Итак, когда я выполняю вычисление новой даты, мне нужно иметь возможность извлекать поле из этого поста и использовать его.
Я также думал о создании скрипта If / Else, в котором я бы выполнял вычисление даты на основе того, что было установлено в форме. Итак, если пользователь сказал повторять это каждые 15 дней, у меня было бы что-то вроде:
add_filter( ‘gform_replace_merge_tags’, ‘new_date_plus_30’, 10, 7); функция new_date_plus_30( $text, $form, $entry, $url_encode, $esc_html, $nl2br, $format) {
if ( $form_id == 34 amp;amp; $field_id == 2 amp;amp; $value == 'add 30 days') {
$merge_tag = '{date_plus_30}';
$new_date = date('m/d/Y', strtotime(' 30 days'));
}
else if ( $form_id == 34 amp;amp; $field_id == 2 amp;amp; $value == 'first of month') {
$merge_tag = '{first_of_month}';
$new_date = date('m/d/Y', strtotime('first of next month'));
}
}
return str_replace( $merge_tag, $new_date, $text );
}
Но моя проблема все та же. Как я могу использовать два фильтра одновременно? Я предполагаю, что мне нужно использовать gform_get_input_value. Пожалуйста, просмотрите мой код и оставьте отзыв, есть ли другой способ?
Ответ №1:
Или, может быть, что-то вроде этого…
add_filter( 'gform_merge_tag_filter', function ( $value, $merge_tag, $options, $field, $raw_value ) {
if ( $field->id == '2' amp;amp; $value == 'first of the month') {
$merge_tag = '{the_next_date}';
$thedatetochange = 'Not sure how to get the date value here...';
$value = date('m/d/Y', strtotime($thedatetochange . 'first of the next month'));
return $value;
}
else if ( $field->id == '2' amp;amp; $value == 'the 15th') {
$merge_tag = '{the_next_date}';
$thedatetochange = 'Not sure how to get the date value here...';
$the_first_date = date('m/d/Y', strtotime($thedatetochange . 'first of the next month' ));
$value = date('m/d/Y', strtotime($the_first_date . ' 15 days' ));
return $value;
}
}, 10, 5 );
Ответ №2:
Итак, после дополнительных поисков смогу ли я использовать что-то подобное для получения значения поля?
$theDateToChange = rgar( $entry, ‘3’);
Предполагается, что поле 3 является значением даты. Сработает ли это для получения текущей даты ввода?
Ответ №3:
$entry
Пропускается через фильтр gform_replace_merge_tags. Вы можете извлечь любое значение поля из $entry
по его идентификатору поля. Например, если ваш идентификатор поля был равен 1:
$value = $entry[1];
В качестве альтернативы, если вы готовы использовать эту измененную дату в качестве дополнительного поля даты в вашей форме, у нас есть фрагмент, который может обрабатывать функциональность за вас.
https://gravitywiz.com/populate-dates-gravity-form-fields/
new GW_Populate_Date( array(
'form_id' => 1,
'target_field_id' => 2,
'modifier' => ' 30 days'
) );
Комментарии:
1. Эй, Дэвид, я на самом деле прочитал эту статью несколько раз, чтобы посмотреть, могу ли я что-то сделать со своей. Проблема, с которой я сталкиваюсь с вашей, заключается в том, что мне нужно было бы добавить функциональность if / else. Более или менее мне нужно было бы создать несколько массивов GW_Populate_date. Поверьте мне, я был очень увлечен этим. Но мне нужно иметь возможность обновлять дату на 1 месяц, 3 месяца, 6 месяцев и 1 год в зависимости от опции, которую определяет пользователь.
Ответ №4:
Итак, вот мой текущий рабочий код…
add_action( 'gform_admin_pre_render', 'add_merge_tags' );
function add_merge_tags( $form ) {
?>
<script type="text/javascript">
gform.addFilter('gform_merge_tags', 'add_merge_tags');
function add_merge_tags(mergeTags, elementId, hideAllFields, excludeFieldTypes, isPrepop, option){
mergeTags["custom"].tags.push({ tag: '{the_next_date}', label: 'The Next Date' });
return mergeTags;
}
</script>
<?php
//return the form object from the php hook
return $form;
}
add_action('wp', 'add_merge_tags');
/** MY MERGE TAGS HERE */
add_filter( 'gform_replace_merge_tags', 'new_date', 10, 7 );
function new_date( $value, $merge_tag, $options, $field, $raw_value, $entry, $text, $form, $url_encode, $esc_html, $nl2br, $format ) {
$pmoptions = $entry[7];
if ( $pmoptions == 'Monthly') {
$merge_tag = '{the_next_date}';
$old_date = $entry[2];
$new_date = date('m/d/Y', strtotime( $old_date . ' 1 month'));
return str_replace( $merge_tag, $new_date, $text );
}
else if ( $pmoptions == 'Quarterly') {
$merge_tag = '{the_next_date}';
$old_date = $entry[2];
$new_date = date('m/d/Y', strtotime( $old_date . ' 3 month'));
return str_replace($merge_tag, $new_date, $text);
}
}
apply_filters( 'gform_replace_merge_tags', $value, $merge_tag, $options, $field, $raw_value, $entry, $text, $form, $url_encode, $esc_html, $nl2br, $format );