1: <?php
2:
3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
13: function papi_get_page_new_url( $page_type, $append_admin_url = true, $post_type = null, $exclude = [] ) {
14: $admin_url = $append_admin_url ? get_admin_url() : '';
15:
16: $admin_url = $admin_url . 'post-new.php?page_type=' . $page_type . papi_get_page_query_strings( '&', $exclude );
17:
18: if ( ! is_null( $post_type ) && in_array( 'post_type', $exclude ) ) {
19: $admin_url = str_replace( '&&', '&', $admin_url . '&post_type=' . $post_type );
20: }
21:
22: return papi_append_post_type_query( $admin_url, $post_type );
23: }
24:
25: 26: 27: 28: 29: 30: 31: 32:
33: function papi_get_page_query_strings( $first_char = '&', $exclude = [] ) {
34: $request_uri = $_SERVER['REQUEST_URI'];
35: $parsed_url = parse_url( $request_uri );
36:
37: if ( ! isset( $parsed_url['query'] ) || empty( $parsed_url['query'] ) ) {
38: return '';
39: }
40:
41: $query = $parsed_url['query'];
42: $query = preg_replace( '/page\=[a-z-,]+/', '', $query );
43: $query = str_replace( '?', '', $query );
44: $query = explode( '&', $query );
45:
46: $query = array_filter( $query, function ( $q ) use ( $exclude ) {
47: $q = explode( '=', $q );
48:
49: if ( empty( $q ) || empty( $q[0] ) ) {
50: return false;
51: }
52:
53: if ( empty( $exclude ) ) {
54: return true;
55: }
56:
57: return ! in_array( $q[0], $exclude );
58: } );
59:
60: $query = implode( '&', $query );
61: $query = $first_char . $query;
62:
63: if ( in_array( 'post_type', $exclude ) ) {
64: return $query;
65: }
66:
67: if ( $query === $first_char ) {
68: $query = '';
69: }
70:
71: $empty_query = empty( $query );
72: $query = papi_append_post_type_query( $query );
73:
74: if ( $empty_query ) {
75: return $first_char . substr( $query, 1 );
76: }
77:
78: return $query;
79: }
80:
81: 82: 83: 84: 85: 86: 87: 88:
89: function papi_append_post_type_query( $url, $post_type_arg = null ) {
90: if ( strpos( $url, 'post_type=' ) !== false ) {
91: return preg_replace( '/&%.+/', '', $url );
92: }
93:
94: $post_id = papi_get_post_id();
95:
96: if ( $post_id === 0 ) {
97: $post_type = papi_get_or_post( 'post_type' );
98: } else {
99: $post_type = get_post_type( $post_id );
100: }
101:
102: if ( ! empty( $post_type_arg ) && empty( $post_type ) ) {
103: $post_type = $post_type_arg;
104: }
105:
106: if ( empty( $post_type ) ) {
107: $post_type = 'post';
108: }
109:
110: if ( ! empty( $post_type ) ) {
111: if ( substr( $url, - 1, 1 ) !== '&' ) {
112: $url .= '&';
113: }
114:
115: $url .= 'post_type=' . $post_type;
116: }
117:
118: return $url;
119: }
120: