custom sanitization - cloneable group - php error
- This topic has 3 replies, 2 voices, and was last updated 2 years, 4 months ago by
Prabakaran Shankar.
-
AuthorPosts
-
December 5, 2022 at 12:36 AM #39494
Prabakaran Shankar
ParticipantHello,
The sanitization function of cloneable group throws a PHP error and there is no action.
details are below.
Metabox<?php add_filter( 'rwmb_meta_boxes', 'your_prefix_function_name' ); function your_prefix_function_name( $meta_boxes ) { $prefix = ''; $meta_boxes[] = [ 'title' => __( 'List1', 'your-text-domain' ), 'id' => 'list1', 'post_types' => ['page'], 'storage_type' => 'custom_table', 'table' => 'custom', 'fields' => [ [ 'name' => __( 'List', 'your-text-domain' ), 'id' => $prefix . 'list_data', 'type' => 'group', 'clone' => true, 'sort_clone' => true, 'add_button' => __( 'Add more job', 'your-text-domain' ), 'sanitize_callback' => 'list_sanitize', 'fields' => [ [ 'name' => __( 'Title', 'your-text-domain' ), 'id' => $prefix . 'jtitle', 'type' => 'text', 'required' => true, 'columns' => 6, ], [ 'name' => __( 'Job Page_URL', 'your-text-domain' ), 'id' => $prefix . 'jurl', 'type' => 'url', 'required' => true, 'columns' => 6, ], [ 'name' => __( 'Description', 'your-text-domain' ), 'id' => $prefix . 'shdp', 'type' => 'textarea', ], [ 'name' => __( 'Deadline Date', 'your-text-domain' ), 'id' => $prefix . 'dedte', 'type' => 'date', 'required' => true, 'columns' => 4, ], [ 'name' => __( 'Subject', 'your-text-domain' ), 'id' => $prefix . 'subli', 'type' => 'select_advanced', 'options' => [ 'chemistry' => __( 'Chemistry', 'your-text-domain' ), 'physics' => __( 'Physics', 'your-text-domain' ), ], 'required' => true, 'columns' => 4, ], [ 'name' => __( 'Added/Updated Date', 'your-text-domain' ), 'id' => $prefix . 'aupd', 'type' => 'date', 'required' => true, 'columns' => 4, ], ], ], ], ]; return $meta_boxes; }
sanitize function
function list_sanitize($value){ //list - group clone $jtitle = isset( $value['jtitle'] ) ? $value['jtitle'] :[]; //title if( !empty($jtit) ){ $value['jtitle'][0] = sanitize_text_field($jtitle[0]); // PHP error 1 - Only the first byte will be assigned to the string offset } $jurl = isset( $value['jurl'] ) ? $value['jurl'] :[]; //url if( !empty($joburl) ){ $value['jurl'][0] = esc_url_raw($jurl[0]); } $shdp = isset( $value['shdp'] ) ? $value['shdp'] :[]; //short description if( !empty($shdp) ){ $value['shdp'][0] = sanitize_textarea($shdp[0]); //PHP error 2 - Only the first byte will be assigned to the string offset } $dedte = isset($value['dedte'] ) ? $value['dedte'] :[]; // deadline date if( $dedte[0] <= date('Y-m-d') ){ $value['dedte'][0] = '0000-00-00'; } return $value; }
PHP error
1. Only the first byte will be assigned to the string offset
2. Only the first byte will be assigned to the string offsetDecember 5, 2022 at 9:23 PM #39508Peter
ModeratorHello,
The cloneable is set in the group level so I think you will need to use a for loop to get the group item and check the subfield value inside the loop. For example:
function list_sanitize($values){ //list - group clone foreach ( $values as $key => $value ) { $jtitle = isset( $value['jtitle'] ) ? $value['jtitle'] :[]; //title if( !empty($jtit) ){ $values[$key]['jtitle'] = sanitize_text_field($jtitle); } } return $values; }
Let me know how it goes.
December 6, 2022 at 9:43 AM #39524Prabakaran Shankar
ParticipantThank Mr. Peter,
But no response for the code. I have checked as$values[$key]['jtitle'] = 'Hello world';
December 7, 2022 at 12:25 PM #39577Prabakaran Shankar
ParticipantHello Peter,
I believe the issue is still with the values from the [group clone] $values. I simply used the database data that was unserialized and serialized using your technique, and everything went smoothly. I believe the issue is values being passed to the sanitize function. Note: It only applies to clone values. -
AuthorPosts
- You must be logged in to reply to this topic.