Além da resposta de Rajeev Vyas, você não precisa passar nenhum parâmetro não vazio para add_query_arg()
. O seguinte sempre funcionou bem para mim:
// relative current URI:
$current_rel_uri = add_query_arg( NULL, NULL );
// absolute current URI (on single site):
$current_uri = home_url( add_query_arg( NULL, NULL ) );
A função recai em $_SERVER[ 'REQUEST_URI' ]
e aplica urlencode_deep()
a ela. Veja enlace
Editar:
Como $_SERVER[ 'REQUEST_URI' ]
representa a entrada do usuário não filtrada, deve-se sempre ignorar o valor de retorno de add_query_arg()
quando o contexto é alterado. Por exemplo, use esc_url_raw()
para uso do banco de dados ou esc_attr()
ou esc_url()
para HTML.
Atualizar
O exemplo mostrado que deve criar um URI absoluto (contendo esquema e host) não funciona em vários sites com subdiretórios, pois home_url()
retornaria o URI completo, incluindo um segmento de caminho. Uma solução melhor para o código ciente de vários sites seria esta:
// absolute URI in multisite aware environment
$parts = parse_url( home_url() );
$current_uri = "{$parts['scheme']}://{$parts['host']}" . add_query_arg( NULL, NULL );
O WordPress core não suporta porta, usuário ou senha em uma URL de site multisite, portanto, isso deve ser suficiente.