草庐IT

php - WordPress 联系表格 7 文本值更改

coder 2024-04-07 原文

WordPress - 联系表 7

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

当用户输入文本框并提交数据时,

  1. 验证 - 我已经完成了
  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')。因此,我们可以将流程分为两个步骤。

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

使用您的示例 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 点有效。

  1. 验证。
  2. 如果条目无效则停止提交。

第 2 步:重新运行测试以获得所需的值并更新它。

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

P.S. 这将更新电子邮件中发送的值,或者如果您存储了提交中的值。它将显示验证消息,但不会在文本字段中显示更新的值,因为在这种情况下无法使用 php 完成。

附言2 这都是经过测试的代码。快乐编码。

关于php - WordPress 联系表格 7 文本值更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53429325/

有关php - WordPress 联系表格 7 文本值更改的更多相关文章

  1. ruby-on-rails - Ruby on Rails 迁移,将表更改为 MyISAM - 2

    如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设

  2. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  3. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  4. ruby - Capistrano 3 在任务中更改 ssh_options - 2

    我尝试使用不同的ssh_options在同一阶段运行capistranov.3任务。我的production.rb说:set:stage,:productionset:user,'deploy'set:ssh_options,{user:'deploy'}通过此配置,capistrano与用户deploy连接,这对于其余的任务是正确的。但是我需要将它连接到服务器中配置良好的an_other_user以完成一项特定任务。然后我的食谱说:...taskswithoriginaluser...task:my_task_with_an_other_userdoset:user,'an_othe

  5. ruby - 更改 ActiveRecord 中对象的类 - 2

    假设我有一个FireNinja我的数据库中的对象,使用单表继承存储。后来才知道他真的是WaterNinja.将他更改为不同的子类的最干净的方法是什么?更好的是,我很想创建一个新的WaterNinja对象并替换旧的FireNinja在数据库中,保留ID。编辑我知道如何创建新的WaterNinja来self现有FireNinja的对象,我也知道我可以删除旧的并保存新的。我想做的是改变现有项目的类别。我是通过创建一个新对象并执行一些ActiveRecord魔法来替换行,还是通过对对象本身做一些疯狂的事情,或者甚至通过删除它并使用相同的ID重新插入来做到这一点,这是问题的一部分。

  6. ruby-on-rails - Prawn - 表格单元格内的链接 - 2

    我正在尝试用Prawn生成PDF。在我的PDF模板中,我有带单元格的表格。在其中一个单元格中,我有一个电子邮件地址:cell_email=pdf.make_cell(:content=>booking.user_email,:border_width=>0)我想让电子邮件链接到“mailto”链接。我知道我可以这样链接:pdf.formatted_text([{:text=>booking.user_email,:link=>"mailto:#{booking.user_email}"}])但是将这两行组合起来(将格式化文本作为内容)不起作用:cell_email=pdf.make_c

  7. python - 如何读取 MIDI 文件、更改其乐器并将其写回? - 2

    我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的

  8. ruby - 如何使用 Ruby 将 CSV 文件读入 HTML 表格? - 2

    我正在尝试将一个简单的CSV文件读入HTML表格以在浏览器中显示,但我遇到了麻烦。这就是我正在尝试的:Controller:defshow@csv=CSV.open("file.csv",:headers=>true)end查看:输出:NameStartDateEndDateQuantityPostalCode基本上我只获取标题,而不会读取和呈现CSV正文。 最佳答案 这最终成为最终解决方案:Controller:defshow#OpenaCSVfile,andthenreaditintoaCSV::Tableobjectforda

  9. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

  10. ruby - 是否可以将 IRB 提示配置为动态更改? - 2

    我想在IRB中浏览文件系统并让提示更改以反射(reflect)当前工作目录,但我不知道如何在每个命令后进行提示更新。最终,我想在日常工作中更多地使用IRB,让bash溜走。我在我的.irbrc中试过这个:require'fileutils'includeFileUtilsIRB.conf[:PROMPT][:CUSTOM]={:PROMPT_N=>"\e[1m:\e[m",:PROMPT_I=>"\e[1m#{pwd}>\e[m",:PROMPT_S=>"FOO",:PROMPT_C=>"\e[1m#{pwd}>\e[m",:RETURN=>""}IRB.conf[:PROMPT_MO

随机推荐