/** * 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. * * Adding a single key & value or an associative array. Setting a key value to * an empty string removes the key. Omitting oldquery_or_uri uses the $_SERVER * value. Additional values provided are expected to be encoded appropriately * with urlencode() or rawurlencode(). * * @since 4.7.0 * * @param string|array $param1 Either newkey or an associative_array. * @param string $param2 Either newvalue or oldquery or URI. * @param string $param3 Optional. Old query or URI. * @return string New URL query string. */ function add_query_arg() { $args = func_get_args(); if (is_array($args[0])) { if (count($args) < 2 || false === $args[1]) { $uri = $_SERVER['REQUEST_URI']; } else { $uri = $args[1]; } } else { if (count($args) < 3 || false === $args[2]) { $uri = $_SERVER['REQUEST_URI']; } else { $uri = $args[2]; } } if ($frag = strstr($uri, '#')) { $uri = substr($uri, 0, -strlen($frag)); } else { $frag = ''; } if (0 === stripos($uri, 'http://')) { $protocol = 'http://'; $uri = substr($uri, 7); } elseif (0 === stripos($uri, 'https://')) { $protocol = 'https://'; $uri = substr($uri, 8); } else { $protocol = ''; } if (strpos($uri, '?') !== false) { list($base, $query) = explode('?', $uri, 2); $base .= '?'; } elseif ($protocol || strpos($uri, '=') === false) { $base = $uri . '?'; $query = ''; } else { $base = ''; $query = $uri; } asc_parse_str($query, $qs); $qs = urlencode_deep($qs); // this re-URL-encodes things that were already in the query string if (is_array($args[0])) { $kayvees = $args[0]; $qs = array_merge($qs, $kayvees); } else { $qs[$args[0]] = $args[1]; } foreach ($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; }
/** * Administration Screen CSS for changing the styles. * * If installing the 'wp-admin/' directory will be replaced with './'. * * The $_asc_admin_css_colors global manages the Administration Screens CSS * stylesheet that is loaded. The option that is set is 'admin_color' and is the * color and key for the array. The value for the color key is an object with * a 'url' parameter that has the URL path to the CSS file. * * The query from $src parameter will be appended to the URL that is given from * the $_asc_admin_css_colors array value URL. * * @since 2.6.0 * @uses $_asc_admin_css_colors * * @param string $src Source URL. * @param string $handle Either 'colors' or 'colors-rtl'. * @return string URL path to CSS stylesheet for Administration Screens. */ function asc_style_loader_src($src, $handle) { global $_asc_admin_css_colors; if (defined('ASC_INSTALLING')) { return preg_replace('#^wp-admin/#', './', $src); } if ('colors' == $handle) { $color = get_user_option('admin_color'); if (empty($color) || !isset($_asc_admin_css_colors[$color])) { $color = 'fresh'; } $color = $_asc_admin_css_colors[$color]; $parsed = parse_url($src); $url = $color->url; if (!$url) { return false; } if (isset($parsed['query']) && $parsed['query']) { asc_parse_str($parsed['query'], $qv); $url = add_query_arg($qv, $url); } return $url; } return $src; }