Вот этот шорткод [profile] выводит и сохраняет имя юзера.
Естественно, нужно сделать проверки на заполненность и обрезание лишних символов, но логика должна быть понятна.
<?php
function profile_info_shortcode( $atts ) {
ob_start();
if ( is_user_logged_in() ) {
global $current_user;
if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == 'update-user' ) {
update_user_meta( $current_user->ID, 'first_name', esc_attr( $_POST['first-name'] ) );
}
?>
<form method="post" id="user_page" action="<?php the_permalink(); ?>">
<label for="first-name"><?php _e( 'Имя', 'ay' ); ?></label>
<input name="first-name" type="text" id="first-name" value="<?php the_author_meta( 'first_name', $current_user->ID ); ?>" />
<input name="updateuser" type="submit" id="updateuser" value="<?php _e( 'Сохранить', 'ay' ); ?>" />
<?php wp_nonce_field( 'update-user' ) ?>
<input name="action" type="hidden" id="action" value="update-user" />
</form>
<?php
}
return ob_get_clean();
}
add_shortcode( 'profile', 'profile_info_shortcode' );