name = 'user'; $this->label = 'User Selector'; $this->category = 'relational'; } public function render( $field, $value = '', $name = null ) { $name = $name ?: "metaforge[{$field['name']}]"; $multiple = ! empty( $field['multiple'] ); $selected_ids = array(); if ( ! empty( $value ) ) { $selected_ids = is_array( $value ) ? $value : explode( ',', (string) $value ); $selected_ids = array_filter( array_map( 'intval', $selected_ids ) ); } $user_args = array( 'number' => 100, 'orderby' => 'display_name', 'order' => 'ASC', ); if ( ! empty( $field['role_filter'] ) ) { $user_args['role'] = sanitize_text_field( $field['role_filter'] ); } $users = get_users( $user_args ); echo '
'; if ( ! empty( $field['label'] ) ) { echo ''; } $input_name = $multiple ? $name . '[]' : $name; $placeholder = '— Select ' . ( $field['label'] ?? 'User' ) . ' —'; echo ''; echo '
'; } public function format_value( $value, $post_id, $field ) { if ( empty( $value ) ) { return ! empty( $field['multiple'] ) ? array() : null; } $ids = is_array( $value ) ? $value : explode( ',', (string) $value ); $ids = array_filter( array_map( 'intval', $ids ) ); if ( empty( $ids ) ) { return ! empty( $field['multiple'] ) ? array() : null; } $return_format = $field['user_return_format'] ?? 'array'; $users = array(); foreach ( $ids as $uid ) { $u = get_userdata( $uid ); if ( ! $u ) { continue; } if ( $return_format === 'id' ) { $users[] = $u->ID; } elseif ( $return_format === 'object' ) { $users[] = $u; } else { // Default: structured array $users[] = array( 'ID' => $u->ID, 'id' => $u->ID, 'user_login' => $u->user_login, 'display_name' => $u->display_name, 'user_email' => $u->user_email, 'user_url' => $u->user_url, 'roles' => $u->roles, 'avatar' => get_avatar_url( $u->ID ), ); } } if ( empty( $field['multiple'] ) ) { return reset( $users ) ?: null; } return $users; } public function sanitize( $value, $field ) { if ( is_array( $value ) ) { $ids = array_filter( array_map( 'intval', $value ) ); return ! empty( $field['multiple'] ) ? $ids : ( reset( $ids ) ?: 0 ); } $val = intval( $value ); return ! empty( $field['multiple'] ) ? array( $val ) : $val; } }