PluginProbe ʕ •ᴥ•ʔ
Admin and Site Enhancements (ASE) / 8.6.2
Admin and Site Enhancements (ASE) v8.6.2
9.1.0 9.0.2 9.0.1 9.0.0 8.9.2 8.9.1 8.9.0 8.8.8 8.8.7 8.8.6 8.8.5 8.8.4 8.8.3 8.8.2 8.8.1 8.8.0 8.7.3 8.7.2 8.7.1 8.2.1 8.2.2 8.2.3 8.3.0 8.3.1 8.3.2 8.4.0 8.4.1 8.4.2 8.5.0 8.5.1 8.5.2 8.6.0 8.6.1 8.6.2 8.7.0 5.0.1 5.0.2 5.0.2.1 5.0.2.2 5.0.2.3 5.0.2.4 5.1.0 5.2.0 5.2.1 5.2.10 5.2.11 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.0 5.3.1 5.3.2 5.4.0 5.4.1 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.7.0 5.7.1 5.8.0 5.8.1 6.0.0 6.0.3 6.0.4 6.0.5 6.0.5.1 6.0.6 6.0.7 6.0.8.1 6.1.0 6.1.3 6.2.0 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.2.6 6.2.7 6.3.0 6.3.1 6.3.2 6.4.0 6.5.0 6.5.1 6.6.0 6.7.0 6.8.0 6.8.2 6.8.3 6.9.0 6.9.1 6.9.10 6.9.11 6.9.12 6.9.13.1 6.9.13.2 6.9.2 6.9.3 6.9.4 6.9.5 6.9.6 6.9.7 6.9.8 6.9.9 7.0.0 7.0.2 7.0.2.1 7.0.2.2 7.0.2.3 7.0.3 7.1.0 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2.0 7.2.1 7.3.0 7.3.1 7.3.2 7.3.3 7.4.0 7.4.2 7.4.4 7.4.5 7.4.6 7.4.7 7.4.8 7.5.0 7.5.1 7.5.2 7.5.3 7.5.4 7.6.0 7.6.1 7.6.1.1 7.6.10 7.6.11 7.6.2 7.6.3 7.6.4 7.6.5 7.6.6 7.6.7 7.6.7.1 7.6.8 7.6.9 7.7.0 7.8.0 7.8.1 7.8.10 7.8.11 7.8.12 7.8.13 7.8.14 7.8.15 7.8.16 7.8.17 7.8.18 7.8.2 7.8.3 7.8.4 7.8.5 7.8.5.1 7.8.6 7.8.7 7.8.8 7.8.9 7.9.0 7.9.1 7.9.10 7.9.11 7.9.2 7.9.3 7.9.4 7.9.5 7.9.6 7.9.7 7.9.8 7.9.9 8.0.0 8.0.1 8.0.2 8.0.3 8.0.4 8.0.5 8.0.6 8.0.7 8.0.8 8.1.0 8.1.1 8.1.2 8.1.3 8.1.4 8.2.0 trunk 1.0.0 1.1.0 1.2.0 1.3.0 1.4.0 1.5.0 1.6.0 1.7.0 1.8.0 1.9.0 2.0.0 2.1.0 2.2.0 2.3.0 2.4.0 2.5.0 2.6.0 2.7.0 2.8.0 2.8.1 2.8.2 2.8.3 2.9.0 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.2.0 3.3.0 3.4.0 3.5.0 3.6.1 3.7.0 3.8.0 3.9.0 3.9.1 3.9.2 4.0.0 4.0.1 4.1.0 4.2.0 4.2.1 4.2.2 4.3.0 4.3.1 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.8.0 4.8.1 4.8.2 4.8.3 4.9.0 4.9.1 4.9.2 4.9.3 5.0.0
admin-site-enhancements / classes / class-external-permalinks.php
admin-site-enhancements / classes Last commit date
class-activation.php 4 months ago class-admin-menu-organizer.php 4 months ago class-admin-menu-svg-icon-mask.php 4 months ago class-auto-publish-posts-with-missed-schedule.php 4 months ago class-avif-upload.php 4 months ago class-captcha-protection.php 4 months ago class-change-login-url.php 4 months ago class-cleanup-admin-bar.php 4 months ago class-common-methods.php 4 months ago class-content-duplication.php 4 months ago class-content-order.php 4 months ago class-custom-admin-footer-text.php 4 months ago class-custom-body-class.php 4 months ago class-custom-css.php 4 months ago class-custom-nav-menu-items-in-new-tab.php 4 months ago class-deactivation.php 4 months ago class-disable-author-archives.php 4 months ago class-disable-comments.php 4 months ago class-disable-dashboard-widgets.php 4 months ago class-disable-embeds.php 4 months ago class-disable-feeds.php 4 months ago class-disable-gutenberg.php 4 months ago class-disable-rest-api.php 4 months ago class-disable-smaller-components.php 4 months ago class-disable-updates.php 4 months ago class-disable-xml-rpc.php 4 months ago class-display-system-summary.php 4 months ago class-email-address-obfuscator.php 4 months ago class-email-delivery.php 4 months ago class-enhance-list-tables.php 4 months ago class-external-permalinks.php 4 months ago class-heartbeat-control.php 4 months ago class-hide-admin-bar.php 4 months ago class-hide-admin-notices.php 4 months ago class-image-sizes-panel.php 4 months ago class-image-upload-control.php 4 months ago class-insert-head-body-footer-code.php 4 months ago class-last-login-column.php 4 months ago class-limit-login-attempts.php 4 months ago class-login-id-type.php 4 months ago class-login-logout-menu.php 4 months ago class-maintenance-mode.php 4 months ago class-manage-ads-appads-txt.php 4 months ago class-manage-robots-txt.php 4 months ago class-media-files-visibility-control.php 4 months ago class-media-replacement.php 4 months ago class-multiple-user-roles.php 4 months ago class-obfuscate-author-slugs.php 4 months ago class-open-external-links-in-new-tab.php 4 months ago class-password-protection.php 4 months ago class-redirect-after-login.php 4 months ago class-redirect-after-logout.php 4 months ago class-redirect-fourofour.php 4 months ago class-registration-date-column.php 4 months ago class-revisions-control.php 4 months ago class-search-engines-visibility.php 4 months ago class-settings-fields-render.php 4 months ago class-settings-sanitization.php 4 months ago class-settings-sections-fields.php 4 months ago class-show-custom-taxonomy-filters.php 4 months ago class-site-identity-on-login-page.php 4 months ago class-svg-upload.php 4 months ago class-various-admin-ui-enhancements.php 4 months ago class-view-admin-as-role.php 4 months ago class-wider-admin-menu.php 4 months ago class-wp-config-transformer.php 4 months ago
class-external-permalinks.php
207 lines
1 <?php
2
3 namespace ASENHA\Classes;
4
5 /**
6 * Class for External Permalinks module
7 *
8 * @since 6.9.5
9 */
10 class External_Permalinks {
11 /**
12 * Check if External Permalinks is enabled for the given post type.
13 *
14 * In the free version, this always behaves like 'only-on'. In the pro
15 * version, this can be 'only-on', 'except-on' or 'all-post-types'.
16 *
17 * @param string $post_type_slug Post type slug.
18 * @param array $options Plugin options.
19 * @return bool True when enabled for the post type.
20 */
21 private function is_enabled_for_post_type( $post_type_slug, $options = array() ) {
22 if ( empty( $post_type_slug ) ) {
23 return false;
24 }
25 $enabled_for = ( isset( $options['enable_external_permalinks_for'] ) && is_array( $options['enable_external_permalinks_for'] ) ? $options['enable_external_permalinks_for'] : array() );
26 // Only operate on applicable post types (public, excluding attachment).
27 $applicable_post_types = array_keys( $enabled_for );
28 $applicable_post_types = array_values( array_diff( $applicable_post_types, array('attachment') ) );
29 if ( empty( $applicable_post_types ) || !in_array( $post_type_slug, $applicable_post_types, true ) ) {
30 return false;
31 }
32 $type = 'only-on';
33 $selected_post_types = array();
34 foreach ( $enabled_for as $slug => $is_enabled ) {
35 if ( 'attachment' === $slug ) {
36 continue;
37 }
38 if ( $is_enabled ) {
39 $selected_post_types[] = $slug;
40 }
41 }
42 // Default to 'only-on'.
43 return in_array( $post_type_slug, $selected_post_types, true );
44 }
45
46 /**
47 * Add external permalink meta box for enabled post types
48 *
49 * @since 3.9.0
50 */
51 public function add_external_permalink_meta_box( $post_type, $post ) {
52 $options = get_option( ASENHA_SLUG_U, array() );
53 if ( !$this->is_enabled_for_post_type( $post_type, $options ) ) {
54 return;
55 }
56 // Skip adding meta box for post types where Gutenberg is enabled
57 // if (
58 // function_exists( 'use_block_editor_for_post_type' )
59 // && use_block_editor_for_post_type( $post_type )
60 // ) {
61 // return;
62 // }
63 add_meta_box(
64 'asenha-external-permalink',
65 // ID of meta box
66 'External Permalink',
67 // Title of meta box
68 [$this, 'output_external_permalink_meta_box'],
69 // Callback function
70 $post_type,
71 // The screen on which the meta box should be output to
72 'normal',
73 // context
74 'high'
75 );
76 }
77
78 /**
79 * Render External Permalink meta box
80 *
81 * @since 3.9.0
82 */
83 public function output_external_permalink_meta_box( $post ) {
84 ?>
85 <div class="external-permalink-input">
86 <input name="<?php
87 echo esc_attr( 'external_permalink' );
88 ?>" class="large-text" id="<?php
89 echo esc_attr( 'external_permalink' );
90 ?>" type="text" value="<?php
91 echo esc_url( get_post_meta( $post->ID, '_links_to', true ) );
92 ?>" placeholder="https://" />
93 <div class="external-permalink-input-description">Keep empty to use the default WordPress permalink. External permalink will open in a new browser tab.</div>
94 <?php
95 wp_nonce_field(
96 'external_permalink_' . $post->ID,
97 'external_permalink_nonce',
98 false,
99 true
100 );
101 ?>
102 </div>
103 <?php
104 }
105
106 /**
107 * Save external permalink input
108 *
109 * @since 3.9.0
110 */
111 public function save_external_permalink( $post_id ) {
112 // Only proceed if nonce is verified
113 if ( isset( $_POST['external_permalink_nonce'] ) && wp_verify_nonce( $_POST['external_permalink_nonce'], 'external_permalink_' . $post_id ) ) {
114 $options = get_option( ASENHA_SLUG_U, array() );
115 $post_type = get_post_type( $post_id );
116 if ( !$this->is_enabled_for_post_type( $post_type, $options ) ) {
117 return;
118 }
119 // Get the value of external permalink from input field
120 $external_permalink = ( isset( $_POST['external_permalink'] ) ? esc_url_raw( trim( $_POST['external_permalink'] ) ) : '' );
121 // Update or delete external permalink post meta
122 if ( !empty( $external_permalink ) ) {
123 update_post_meta( $post_id, '_links_to', $external_permalink );
124 } else {
125 delete_post_meta( $post_id, '_links_to' );
126 }
127 }
128 }
129
130 /**
131 * Change WordPress default permalink into external permalink for pages
132 *
133 * @since 3.9.0
134 */
135 public function use_external_permalink_for_pages( $permalink, $post_id ) {
136 $request_uri = sanitize_text_field( $_SERVER['REQUEST_URI'] );
137 // e.g. /wp-admin/index.php?page=page-slug
138 if ( false === strpos( $request_uri, 'mfn-live-builder' ) ) {
139 // When not in BeTheme template builder, that has the 'action=mfn-live-builder' parameter in the URL
140 $options = get_option( ASENHA_SLUG_U, array() );
141 $post_type = get_post_type( $post_id );
142 if ( !$this->is_enabled_for_post_type( $post_type, $options ) ) {
143 return $permalink;
144 }
145 $external_permalink = get_post_meta( $post_id, '_links_to', true );
146 if ( !empty( $external_permalink ) ) {
147 $permalink = $external_permalink;
148 }
149 }
150 return $permalink;
151 }
152
153 /**
154 * Change WordPress default permalink into external permalink for posts and custom post types
155 *
156 * @since 3.9.0
157 */
158 public function use_external_permalink_for_posts( $permalink, $post ) {
159 $request_uri = sanitize_text_field( $_SERVER['REQUEST_URI'] );
160 // e.g. /wp-admin/index.php?page=page-slug
161 if ( false === strpos( $request_uri, 'mfn-live-builder' ) ) {
162 // When not in BeTheme template builder, that has the 'action=mfn-live-builder' parameter in the URL
163 $options = get_option( ASENHA_SLUG_U, array() );
164 $post_type = ( is_object( $post ) && isset( $post->post_type ) ? $post->post_type : '' );
165 if ( !$this->is_enabled_for_post_type( $post_type, $options ) ) {
166 return $permalink;
167 }
168 $external_permalink = get_post_meta( $post->ID, '_links_to', true );
169 if ( !empty( $external_permalink ) ) {
170 $permalink = $external_permalink;
171 if ( !is_admin() ) {
172 $permalink = $permalink . '#new_tab';
173 }
174 }
175 }
176 return $permalink;
177 }
178
179 /**
180 * Redirect page/post to external permalink if it's loaded directly from the WP default permalink
181 *
182 * @since 3.9.0
183 */
184 public function redirect_to_external_permalink() {
185 // If not on/loading the single page/post URL, do nothing
186 if ( !is_singular() ) {
187 return;
188 }
189 global $post;
190 if ( !is_null( $post ) && is_object( $post ) && is_a( $post, 'WP_Post' ) ) {
191 $options = get_option( ASENHA_SLUG_U, array() );
192 if ( empty( $post->post_type ) || !$this->is_enabled_for_post_type( $post->post_type, $options ) ) {
193 return;
194 }
195 if ( property_exists( $post, 'ID' ) ) {
196 $external_permalink = get_post_meta( $post->ID, '_links_to', true );
197 if ( !empty( $external_permalink ) ) {
198 wp_redirect( $external_permalink, 302 );
199 // temporary redirect
200 exit;
201 }
202 }
203 }
204 }
205
206 }
207