Gravity Forms - получите значение Date и настройте его, превратите в тег слияния - PullRequest
0 голосов
/ 12 марта 2019

Итак, что я хочу сделать, это взять значение поля, поле даты и добавить к нему определенный период времени, а затем превратить его в тег слияния, который я затем смогу добавить обратно в это значение или использовать еще где.

Я знаю, как сделать новый тег слияния, это не проблема. Мой вопрос: как мне получить значение поля для использования в этом расчете?

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 && $field_id == 2 && $value == 'add 30 days') {

$merge_tag = '{date_plus_30}';
$new_date = date('m/d/Y', strtotime('+30 days'));

}
else if ( $form_id == 34 && $field_id == 2 && $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. Пожалуйста, просмотрите мой код и оставьте отзыв. Есть ли другой способ?

Ответы [ 4 ]

0 голосов
/ 13 марта 2019

Так вот мой текущий рабочий код ...

    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 );
0 голосов
/ 12 марта 2019

Итак, после выполнения дополнительных копаний, смогу ли я использовать что-то подобное для получения значения поля?

$theDateToChange = rgar( $entry, ‘3’);

Это предполагает, что поле 3 является значением даты.Будет ли это работать для получения текущей даты входа?

0 голосов
/ 13 марта 2019

$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'
) );
0 голосов
/ 12 марта 2019

Или, может быть, что-то вроде этого ...

     add_filter( 'gform_merge_tag_filter', function ( $value, $merge_tag, $options, $field, $raw_value ) {
    if ( $field->id == '2' && $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' && $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 );
...