Até onde sei, tudo o que você pode fazer é filtrar o nome de exibição via pre_user_display_name
e verificar se ele já existe. Infelizmente, WP_User_Query
não suporta a consulta por display_name
, portanto, também precisamos adicionar à cláusula WHERE
via pre_user_query
. Além disso, não há uma maneira elegante em que eu possa pensar para lidar com o caso em que o display_name
já existe além do retorno de nada, já que não sabemos através do filtro a que usuário esse nome de exibição em potencial está associado. ou talvez eu esteja apenas cansado e sentindo falta de algo óbvio! Enfim, aqui está um teste rápido que criei:
class wpa82239_display_name {
private $display_name;
public function __construct(){
add_filter( 'pre_user_display_name', array( $this, 'display_name_filter' ) );
}
public function display_name_filter( $display_name ){
$this->display_name = $display_name;
add_action( 'pre_user_query', array( $this, 'user_query_filter' ) );
$args = array(
'number' => 1,
'fields' => 'ID'
);
$user_search = new WP_User_Query( $args );
remove_action( 'pre_user_query', array( $this, 'user_query_filter' ) );
if( 0 == $user_search->total_users )
return $display_name;
return null;
}
public function user_query_filter( $query ){
global $wpdb;
$query->query_where .= $wpdb->prepare(
" AND $wpdb->users.display_name = %s",
$this->display_name
);
}
}
$wpa82239_display_name = new wpa82239_display_name();