WooCommerce 自定义设置选项卡验证

2024-02-24

在 WooCommerce 中使用自定义设置选项卡时,例如:

add_filter('woocommerce_settings_tabs_array', 'add_my_custom_tab', 50);

function add_my_custom_tab($settings_tabs) {
    $settings_tabs['my_custom_tab'] = __('My Custom Tab', 'my-custom-tab');
    return $settings_tabs;
}

add_action('woocommerce_settings_tabs_my_custom_tab', 'my_custom_tab');

function my_custom_tab() {
    woocommerce_admin_fields(get_custom_settings());
}

add_action('woocommerce_update_options_my_custom_tab', 'update_my_custom_tab_settings');

function update_my_custom_tab_settings() {
    woocommerce_update_options(get_custom_settings());
}

function get_custom_settings() {
    $settings = array(
        'section_title' => array(
            'name' => __('Custom Options', 'woocommerce-my-custom-tab'),
            'type' => 'title',
            'desc' => '',
            'id' => 'wc_custom_tab'
        ),
        'example_input' => array(
            'name' => __('My Input', 'woocommerce-my-custom-tab'),
            'type' => 'text',
            'desc' => '',
            'id' => 'wc_my_input'
        ),
        'section_end' => array(
            'type' => 'sectionend',
            'id' => 'wc_section_end'
        )
    );
    return apply_filters('wc_my_custom_tab_settings', $settings);
}

如何在允许 example_input 字段保存到数据库之前对其执行自定义验证,并且如果需要,抛出错误以告诉用户输入有什么问题?


您只需将 html5 required 属性添加到字段即可将字段设为必填。

'example_input' => array(
    'name' => __('My Input', 'woocommerce-my-custom-tab'),
    'type' => 'text',
    'desc' => '',
    'custom_attributes' => array( 'required' => 'required' )
    'id' => 'wc_my_input'
),

但在您的情况下,如果您想在字段更新时显示错误消息,您可以执行类似的操作。添加过滤器woocommerce_admin_settings_sanitize_option_<option_name>

// define the woocommerce_admin_settings_sanitize_option_<option_name> callback 
function filter_woocommerce_admin_settings_sanitize_option_wc_my_input( $value, $option, $raw_value ) { 
    add_action( 'admin_notices', function() use($value) {
        if($value == ""){
            echo '<div id="message" class="notice notice-error is-dismissible"><p>Option is required</p></div>';    
        }
    });
    return $value; 
}; 
// add the filter 
add_filter( "woocommerce_admin_settings_sanitize_option_wc_my_input", 'filter_woocommerce_admin_settings_sanitize_option_wc_my_input', 10, 3 ); 

Edit

您可以像这样循环遍历所有选项

$options = ['wc_my_input' => 'My Input', 'other_field' => 'Other Field']; // get all the options here
foreach($options as $option_name => $option_val){
    // define the woocommerce_admin_settings_sanitize_option_$option_name callback 
    add_filter( "woocommerce_admin_settings_sanitize_option_$option_name", function($value, $option, $raw_value) use($option_val) {
        add_action( 'admin_notices', function() use($value) {
            if($value == ""){
                echo "<div id=\"message\" class=\"notice notice-error is-dismissible\"><p>$option_val is required</p></div>";
            }
        });
        return $value;
    }, 10, 3 ); 
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WooCommerce 自定义设置选项卡验证 的相关文章

  • php56 - CentOS - Remi 仓库

    我刚刚在测试盒上安装了 php 5 6 正常的 cli php 解释器似乎不存在 gt php v bash php command not found gt php56 v PHP 5 6 13 cli built Sep 3 2015
  • 如何移动 Zend_Layout 的“视图”

    通常它会是这样的结构 application modules somemodule views scripts index index phtml 我如何将其移动到 application templates somemodule temp
  • 如何将对象(模型类型对象)插入到 Laravel 中 Collection 对象的特定索引号处?

    我读过戴尔 里斯的代码明亮 https daylerees com codebright 了解更多关于雄辩的信息Collection在 Laravel 中使用 还做了一些其他研究 但找不到我正在寻找的答案 我想插入一个对象 Model输入对
  • 从 Symfony2 中的 http_basic auth 注销

    每当我去 admin logout 我已正确重定向到项目的根目录 但在访问时仍处于登录状态 admin 因为没有提示我输入凭据 这是我的配置 安全 yml security firewalls admin area pattern admi
  • 如何改进 PHP 分页算法?

    我正在研究 PHP 中的分页算法 我可以猜测它需要改进的空间 所以我想对如何改进它有一些想法 无论是从 UI UX 的角度清理代码本身 还是你能想到的任何其他东西 该算法应输出如下所示的分页 1 2 3 6 7 8 97 98 99 or
  • PHP 自定义会话处理程序问题 (PHP 7.1)

    我刚刚在计算机上从 PHP 7 0 迁移到 PHP 7 1 当前版本的 WAMP 的全新 全新安装 它似乎破坏了自定义会话处理程序中的某些内容 该处理程序应该将会话保存到数据库而不是使用文件系统 自定义处理程序类是 class db ses
  • 使用 CodeIgniter 加载视图文件夹外的视图

    我需要从以下范围之外加载视图 this gt load gt view 这似乎是从base application views目录 如何从外部访问视图 application 目录 我想我将不得不延长CI Loader class这是最好的
  • 传递给 Illuminate\Routing\Middleware\ThrottleRequests::addHeaders() 的参数 1 必须是以下实例

    我创建了一个新的中间件来检查用户令牌我创建了中间件然后添加到 kernal php 但是当我尝试访问中间件中的 request 时我收到错误 这是我的中间件代码 namespace App Http Middleware use Illum
  • FPM 与 apache2 无法工作(权限被拒绝)

    我正在尝试使用 apache fastcgi 和 fpm 设置一个 Debian Web 服务器 但我越来越恼火 一旦我停用 mod php 我就会收到以下错误 2014 年 5 月 22 日星期四 12 16 10 错误 客户端 xxx
  • 如何使用 PATCH 更新简单的数据库字段?

    我是 php 和 API 的新手 我正在尝试学习这些方法 但我无法执行 PATCH 或 PUT 来更新我的简单 mysql 数据库 我使用了以下代码 if isset PATCH con mysqli connect localhost r
  • Google Closure 编译器和 multipart/form-data 不起作用

    我正在向 google 闭包编译器 API 服务发出请求 content file get contents file js url http closure compiler appspot com compile post true p
  • 根据重复值对 PHP 数组进行排序

    我有一个包含重复值的数组 我想对数组进行排序 以便重复次数最多的值出现在行中的第一个 这是我的数组的示例 array 1 2 3 2 1 2 2 我想对该数组进行排序 以便它根据重复项的数量对自身进行排序 如下所示 array 2 1 3
  • 唯一的图像哈希值即使 EXIF 信息更新也不会改变

    我正在寻找一种方法来为 python 和 php 中的图像创建唯一的哈希值 我考虑过对原始文件使用 md5 和 因为它们可以快速生成 但是当我更新 EXIF 信息 有时时区关闭 时 它会更改总和 并且哈希也会更改 有没有其他方法可以为这些文
  • 如何验证上传的文件是视频?

    我的服务器上有一些非常敏感的信息 因此安全性是一个大问题 用户需要能够上传视频 我知道允许用户上传文件会带来安全威胁 因为没有 100 的方法可以阻止他们上传非视频 但我显然可以选择服务器将保留哪些文件 我知道检查文件扩展名是不够的 检查
  • php - 重定向ajax请求[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何在 php wordpress 中重定向 ajax 请求 I tried header Location http redirect
  • 将 Base64 字符串转换为图像文件? [复制]

    这个问题在这里已经有答案了 我正在尝试将我的 Base64 图像字符串转换为图像文件 这是我的 Base64 字符串 http pastebin com ENkTrGNG http pastebin com ENkTrGNG 使用以下代码将
  • 如何检测iPhone是否有视网膜显示屏?

    如何检测 iPhone 是否配备视网膜显示屏 有靠谱的办法吗 要么是纯 PHP 要么最好是 Zend Framework 方式来执行此操作 我通过这个弄清楚了 var retina window devicePixelRatio gt 1
  • 什么是 PHP session_start()

    它是否基于 cookie 启动当前会话 从 PHP 网站上得到的 PHP如何控制会话 如果我在用户打开我的登录页面时启动会话 我什至可以使用该会话做什么 我可以使用当前会话来获取有关登录用户的信息吗 PHP 会话系统允许您将数据安全地存储在
  • 访问 PHP 数组对象受保护的属性

    我正在尝试在 Symfony2 中上传多个文件 我正在尝试访问以下请求对象 但无法获取参数属性 如何将文件一一上传 我得到的错误 致命错误 无法访问第 66 行 var www File src Webmuch FileBundle Ent
  • 在 Elasticsearch php API 中使用多种类型或索引

    我想使用查询多种类型和索引Elasticsearch PHP API 但我不知道怎么办 我应该将类型和索引的数组传递给 params params index index array of indices params type types

随机推荐