如何向 WooCommerce 扩展添加表单验证

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

目前我有一个可用的 Woocommerce 扩展,它接受用户输入并将其成功保存为 wp_options 表中的选项。现在我想知道如果用户的某些输入超出了预先确定的输入情况,是否可以拒绝它。

我拥有的是

     add_filter('woocommerce_get_sections_advanced', array($this,"wc_bulk_sms"));
     add_filter('woocommerce_get_settings_advanced', array($this,"wc_bulk_sms_settings"),10,2);
     add_action('woocommerce_order_status_changed', array($this,"tp_order_status"),10,3);
            

    //Wc sections
    function wc_bulk_sms($sections){
        $sections['wctpbulksms'] = __('MOBILE SASA Transactional SMS','wordpress');
        return $sections;
    }
        
    function wc_bulk_sms_settings($settings, $current_section){
        if ($current_section == 'wctpbulksms'){
            $tp_sms_settings = array();
            $tp_sms_settings[] = array('name'=>__('TEST Settings','wordpress'),'type'=>'title','id'=>'wctpbulksms');
            $tp_sms_settings[] = array('name'=>__('Enable/Disable','wordpress'),'id'=>'wctpbulksms_enable','type'=>'checkbox','desc'=>__('Enable','wordpress'));
            $tp_sms_settings[] = array('name'=>__('Sender ID','wordpress'),'id'=>'wctpbulksms_senderid','type'=>'text','placeholder'=>'e.g TESTER');
            $tp_sms_settings[] = array('name'=>__('Api Token','wordpress'),'id'=>'wctpbulksms_apitoken','type'=>'text');
            $tp_sms_settings[] = array('name'=>__('Admin Number','wordpress'),'id'=>'wctpbulksms_adminnumber','type'=>'text','desc'=>__('Admin Number will receive a text on every order processing status','wordpress'), 'placeholder'=>'e.g 0729123456');
            $tp_sms_settings[] = array('name'=>__('Receive Admin SMS','wordpress'),'id'=>'wctpbulksms_ordernewadmin','type'=>'checkbox','desc'=>__('Send SMS','wordpress'));
            $tp_sms_settings[] = array('name'=>__('Admin Placed Order SMS','wordpress'),'id'=>'wctpbulksms_ordernewadminsms','type'=>'textarea','desc'=>__('Order shortcodes: {name} {orderid} {total} {phone}','wordpress'),'placeholder'=>__('e.g Hello Admin, {name} has placed an order #{orderid}','wordpress'));
       }

请注意,我有 {name}、{orderid}、{total}、{phone} 等短代码,它们都可以成功运行。我想要防止的是,如果管理员得到愚蠢的想法,使用类似 {firstname} 的东西,它基本上不会做任何事情,但他们可能不知道,因此我需要某种验证来阻止大括号内的任何内容,除了四个批准的短代码之外。

我想在输入中键入时运行此验证并立即显示错误,或者当用户尝试保存设置时,应抛出错误并且不会保存设置。

wordpress woocommerce
1个回答
0
投票

要向 WooCommerce 扩展添加表单验证并确保仅接受预先批准的输入,您可以实现自定义验证逻辑。解决办法如下:

定义一个函数来处理验证:

function validate_wc_bulk_sms_settings($input) {
    // Define the approved shortcodes
    $approved_shortcodes = array('{name}', '{orderid}', '{total}', '{phone}');

    // Loop through each input field
    foreach ($input as $key => $value) {
        // Check if the input contains any disallowed shortcodes
        if (preg_match('/{[^}]+}/', $value) && !in_array($value, $approved_shortcodes)) {
            // If a disallowed shortcode is found, display an error message
            add_settings_error(
                $key,
                'invalid_shortcode',
                'Invalid shortcode used: ' . $value,
                'error'
            );

            // Remove the invalid value from the input
            unset($input[$key]);
        }
    }

    return $input;
}

将验证函数挂钩到

woocommerce_settings_saved
操作以在保存设置时运行验证:

add_action('woocommerce_settings_saved', 'validate_wc_bulk_sms_settings');

现在,每当用户尝试保存设置时,都会触发 validate_wc_bulk_sms_settings 函数。它将检查每个输入字段是否存在不允许的短代码,并在发现任何情况时显示错误消息。无效值将从输入中删除,从而阻止它们被保存。

通过实施此解决方案,您可以确保 WooCommerce 扩展设置中仅接受经过批准的输入,从而增强可用性并防止潜在问题。

© www.soinside.com 2019 - 2024. All rights reserved.