重力形式 - 获取日期值并进行调整,使其成为合并标记

问题描述 投票:0回答:4

所以我想要做的是获取字段值,日期字段,并为其添加一段时间,然后将其转换为合并标记,然后我可以将其添加回该值或使用其他位置。

我知道如何制作一个新的合并标签,这不是问题。我的问题是如何获得在该计算中使用的字段值?

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); function 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。请审核我的代码,并提供其他方式的反馈?

gravity-forms-plugin gravityforms
4个回答
0
投票

或者这样的事......

     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 );

0
投票

所以在做了更多的挖掘后,我能用这样的东西来获得该领域的价值吗?

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

这假设字段3是日期值。这可以用于检索当前的输入日期吗?


0
投票

$entry通过gform_replace_merge_tags过滤器传递。您可以通过其字段ID从$entry中获取任何字段值。例如,如果您的字段ID为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
投票

所以这是我目前的工作代码......

    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 );
© www.soinside.com 2019 - 2024. All rights reserved.