WordPress联系人表格7文本值更改 [英] WordPress contact form 7 text value change

查看:34
本文介绍了WordPress联系人表格7文本值更改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

WordPress-联系表7

当有人在其中输入值时,我试图找出用于修改cf7字段值的过滤器。

I am trying to find out the filter to modify the cf7 field value when someone enter values in it.

当用户在文本字段中键入并提交数据时,

when user type in textfield and submit data,


  1. validate-I完成

  2. 如果输入无效,则不应该转到谢谢页面-我已经完成

  3. 用新数据替换文本字段-未完成

例如:1

add_filter( 'wpcf7_validate_text*', 'your_validation_filter_func_tel', 100, 2 );
function your_validation_filter_func_tel( $result, $tag ) {

    $Yourvalue = $_POST['your-number'];
    if ( strlen( $Yourvalue ) == 2 ) {
        $result->invalidate( 'your-number', "Please enter a valid number.  " . );
        // HERE I WANT TO REPLACE NEW DATA TO TEXT FIELD
        $result->data( 'your-number', '1002' );
    } else if ( strlen( $Yourvalue ) == 3 ) {
        $result->invalidate( 'your-number', "Please enter a valid name." . );
        // HERE I WANT TO REPLACE NEW DATA TO TEXT FIELD
        $result->data( 'your-number', '1003' );
    }

    return $result;
}

例如:2

另一个工作示例

除了 $ result ['tel'] = $ tel_cleaned_final;

    <?php

    function custom_filter_wpcf7_is_tel( $result, $tel ) 
    {

        // Initialization and Clean Input
        $tel_cleaned         = strtr( $tel, array(' '=>'', '-'=>'', '.'=>''));
        $tel_cleaned_trimmed = ltrim(strtr( $tel_cleaned, array('+'=>'')), '0');


        /* Test Conditions.
           I concluded 3 if conditions to 1 below bcaz the validation is working perfect
        */
        if ('test conditions here')
        $tel_cleaned_final = substr($tel_cleaned_trimmed, 2);
        else
        $tel_cleaned_final = $tel_cleaned_trimmed;



        if (strlen($tel_cleaned_final) == 10)
        {
        $result = true;

        //$result['tel'] = $tel_cleaned_final; 
        /* 
        Here i want to return new number to text box
        for eg: +91 98989-89898 returns  9898989898
        */

        }
        else
        {
        $result = false;
        }

        return $result;
    }
    add_filter( 'wpcf7_is_tel', 'custom_filter_wpcf7_is_tel', 10, 2 );

    ?>


推荐答案

您尝试做的事情不能仅靠完成验证过滤器。因为这只会根据执行的验证输出true或false。要执行您想要的操作,您必须使用另一个具有您要过滤的值的过滤器(< wpcf7_posted_data ’)。因此,我们可以将过程分为两个步骤。

What you are trying to do cannot be done with only the validation filter. Because that just outputs true or false based on the validations performed. To do what you want, you have to use another filter ( 'wpcf7_posted_data' ) that has the value you want to filter. So we can break down our process into two steps.

步骤1:像您当前所做的那样进行所有验证。

Step 1: Do all the validation like you are currently doing.

使用您的示例2

function custom_filter_wpcf7_is_tel( $result, $tel )
{
    // Initialization and Clean Input
    $tel_cleaned         = strtr( $tel, array(' '=>'', '-'=>'', '.'=>''));
    $tel_cleaned_trimmed = ltrim(strtr( $tel_cleaned, array('+'=>'')), '0');

    /* Test Conditions.
       I concluded 3 if conditions to 1 below bcaz the validation is working perfect
    */
    if ('test conditions here')
    $tel_cleaned_final = substr($tel_cleaned_trimmed, 2);
    else
    $tel_cleaned_final = $tel_cleaned_trimmed;

    if (strlen($tel_cleaned_final) == 10)
    {
        $result = true;
    } else
    {
        $result = false;
    }

    return $result;
}
add_filter( 'wpcf7_is_tel', 'custom_filter_wpcf7_is_tel', 10, 2 );

上面的代码将确保您的点1和点2有效。

The above code will make sure that your points 1 and 2 are working.


  1. 验证。

  2. 如果输入无效,则停止提交。

步骤2:重新运行测试以获取所需的值并对其进行更新。

Step 2: Re-run your tests to get the desired value and update it.

function sr_change_updated_field_value( $posted_data ) 
{ 
    // Initialization and Clean Input
    $tel_cleaned         = strtr( $tel, array(' '=>'', '-'=>'', '.'=>''));
    $tel_cleaned_trimmed = ltrim(strtr( $tel_cleaned, array('+'=>'')), '0');

    /* Test Conditions.
       I concluded 3 if conditions to 1 below bcaz the validation is working perfect
    */
    if ('test conditions here')
    $tel_cleaned_final = substr($tel_cleaned_trimmed, 2);
    else
    $tel_cleaned_final = $tel_cleaned_trimmed;

    // Use the name of your field in place of "tel"
    $posted_data['tel'] = $tel_cleaned_final;

    return $posted_data;
}; 
add_filter( 'wpcf7_posted_data', 'sr_change_updated_field_value', 10, 1 );

PS 这将更新电子邮件中或提交(如果存储它们)。它会显示验证消息,但不会在文本字段中显示更新的值,因为在这种情况下用php无法完成。

P.S. This will update the values sent in the email, or in the submissions if you store them. It will show the validation message, but it will not show the updated value in text field because that cannot be done with php in this scenario.

P.S。 2 这是所有经过测试的代码。快乐编码。

P.S. 2 This is all tested code. Happy Coding.

这篇关于WordPress联系人表格7文本值更改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆