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;
}
}