目前我有一个可用的 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} 的东西,它基本上不会做任何事情,但他们可能不知道,因此我需要某种验证来阻止大括号内的任何内容,除了四个批准的短代码之外。
我想在输入中键入时运行此验证并立即显示错误,或者当用户尝试保存设置时,应抛出错误并且不会保存设置。
要向 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 扩展设置中仅接受经过批准的输入,从而增强可用性并防止潜在问题。