add_query_arg

Definition:
function add_query_arg() {}

Retrieve a modified URL query string.
You can rebuild the URL and append a new query variable to the URL query by using this function. You can also retrieve the full URL with query data.

Parameters

  • mixed $param1: Either newkey or an associative_array
  • mixed $param2: Either newvalue or oldquery or uri
  • mixed $param3: Optional. Old query or uri

Return values

returns:New URL query string.

Source code

function add_query_arg() {

	$ret = '';

	if ( is_array( func_get_arg(0) ) ) {

		if ( @func_num_args() < 2 || false === @func_get_arg( 1 ) )

			$uri = $_SERVER['REQUEST_URI'];

		else

			$uri = @func_get_arg( 1 );

	} else {

		if ( @func_num_args() < 3 || false === @func_get_arg( 2 ) )

			$uri = $_SERVER['REQUEST_URI'];

		else

			$uri = @func_get_arg( 2 );

	}



	if ( $frag = strstr( $uri, '#' ) )

		$uri = substr( $uri, 0, -strlen( $frag ) );

	else

		$frag = '';



	if ( preg_match( '|^https?://|i', $uri, $matches ) ) {

		$protocol = $matches[0];

		$uri = substr( $uri, strlen( $protocol ) );

	} else {

		$protocol = '';

	}



	if ( strpos( $uri, '?' ) !== false ) {

		$parts = explode( '?', $uri, 2 );

		if ( 1 == count( $parts ) ) {

			$base = '?';

			$query = $parts[0];

		} else {

			$base = $parts[0] . '?';

			$query = $parts[1];

		}

	} elseif ( !empty( $protocol ) || strpos( $uri, '=' ) === false ) {

		$base = $uri . '?';

		$query = '';

	} else {

		$base = '';

		$query = $uri;

	}



	wp_parse_str( $query, $qs );

	$qs = urlencode_deep( $qs ); // this re-URL-encodes things that were already in the query string

	if ( is_array( func_get_arg( 0 ) ) ) {

		$kayvees = func_get_arg( 0 );

		$qs = array_merge( $qs, $kayvees );

	} else {

		$qs[func_get_arg( 0 )] = func_get_arg( 1 );

	}



	foreach ( (array) $qs as $k => $v ) {

		if ( $v === false )

			unset( $qs[$k] );

	}



	$ret = build_query( $qs );

	$ret = trim( $ret, '?' );

	$ret = preg_replace( '#=(&|$)#', '$1', $ret );

	$ret = $protocol . $base . $ret . $frag;

	$ret = rtrim( $ret, '?' );

	return $ret;

}

287

No comments yet... Be the first to leave a reply!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: