Url.php
2.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php
namespace AIOSEO\Plugin\Common\Traits\Helpers;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Contains URL helper methods.
*
* @since 4.2.5
*/
trait Url {
/**
* Removes a query string parameter from a URL.
*
* @since 4.2.5
*
* @param string $url The url.
* @param array $parameters The parameter keys to remove.
* @return string The url without the parameters removed.
*/
public function urlRemoveQueryParameter( $url, $parameters ) {
$url = wp_parse_url( $url );
if ( ! empty( $url['query'] ) ) {
// Take the query string apart.
parse_str( $url['query'], $queryStringArray );
// Remove parameters.
foreach ( $parameters as $parameter ) {
if ( isset( $queryStringArray[ $parameter ] ) ) {
unset( $queryStringArray[ $parameter ] );
}
}
// Rebuild the query string.
$url['query'] = build_query( $queryStringArray );
// Rebuild the URL from parse_url.
$url = $this->buildUrl( $url );
}
return $url;
}
/**
* Builds a URL from a parse_url array.
*
* @since 4.2.5
*
* @param array $params The params array.
* @param array $include The keys to include [scheme, user, pass, host, port, path, query, fragment].
* @param array $exclude The keys to exclude [scheme, user, pass, host, port, path, query, fragment].
* @return string The built url.
*/
public function buildUrl( $params, $include = [], $exclude = [] ) {
if ( ! is_array( $params ) ) {
return $params;
}
if ( ! empty( $include ) ) {
foreach ( array_keys( $params ) as $includeKey ) {
if ( ! in_array( $includeKey, $include, true ) ) {
unset( $params[ $includeKey ] );
}
}
}
if ( ! empty( $exclude ) ) {
foreach ( array_keys( $params ) as $excludeKey ) {
if ( in_array( $excludeKey, $exclude, true ) ) {
unset( $params[ $excludeKey ] );
}
}
}
$url = '';
if ( ! empty( $params['scheme'] ) ) {
$url .= $params['scheme'] . '://';
}
if ( ! empty( $params['user'] ) ) {
$url .= $params['user'];
if ( isset( $params['pass'] ) ) {
$url .= ':' . $params['pass'];
}
$url .= '@';
}
if ( ! empty( $params['host'] ) ) {
$url .= $params['host'];
}
if ( ! empty( $params['port'] ) ) {
$url .= ':' . $params['port'];
}
if ( ! empty( $params['path'] ) ) {
$url .= $params['path'];
}
if ( ! empty( $params['query'] ) ) {
$url .= '?' . $params['query'];
}
if ( ! empty( $params['fragment'] ) ) {
$url .= '#' . $params['fragment'];
}
return $url;
}
}