PluginProbe
Post Grid Gutenberg Blocks – PostX / 5.1.0
Post Grid Gutenberg Blocks – PostX v5.1.0
5.1.1 5.1.0 5.0.41 5.0.39 5.0.38 5.0.37 5.0.36 5.0.35 5.0.34 5.0.33 5.0.32 5.0.31 5.0.30 5.0.29 5.0.28 5.0.27 5.0.26 5.0.25 5.0.23 5.0.24 5.0.22 5.0.21 5.0.20 5.0.19 5.0.18 All 240 releases
← All changes | classes/Options.php +58 -58 5.0.18 → 5.1.0 View file →
@@ -30,8 +30,9 @@
30 30 */
31 31 public function __construct() {
32 32 add_action( 'admin_init', array( $this, 'handle_external_redirects' ) );
33 33 add_action( 'admin_menu', array( $this, 'menu_page_callback' ) );
34 + add_action( 'admin_footer', array( $this, 'sync_addon_submenu_visibility' ) );
34 35 add_action( 'in_admin_header', array( $this, 'remove_all_notices' ) );
35 36 add_filter( 'plugin_row_meta', array( $this, 'plugin_settings_meta' ), 10, 2 );
36 37 add_filter( 'plugin_action_links_' . ULTP_BASE, array( $this, 'plugin_action_links_callback' ) );
37 38 }
@@ -71,69 +72,25 @@
71 72 */
72 73 public function plugin_action_links_callback( $links ) {
73 74 $offer_config = array(
74 75 array(
75 - 'start' => '2026-02-19 00:00 Asia/Dhaka',
76 - 'end' => '2026-02-23 23:59 Asia/Dhaka',
76 + 'start' => '2026-07-06 00:00 Asia/Dhaka',
77 + 'end' => '2026-08-01 23:59 Asia/Dhaka',
77 78 'text' => __(
78 - 'Flash Sale - Up to 45% OFF',
79 + 'Summer Sale - Up to 50% OFF',
79 80 'ultimate-post'
80 81 ),
81 - 'utmKey' => 'flash_sale_meta',
82 + 'utmKey' => 'summer_sale_meta',
82 83 ),
83 84 array(
84 - 'start' => '2026-03-16 00:00 Asia/Dhaka',
85 - 'end' => '2026-04-14 23:59 Asia/Dhaka',
85 + 'start' => '2026-09-02 00:00 Asia/Dhaka',
86 + 'end' => '2026-10-10 23:59 Asia/Dhaka',
86 87 'text' => __(
87 - 'Spring Sale - Up to 50% OFF',
88 + 'Get Pro at $39',
88 89 'ultimate-post'
89 90 ),
90 - 'utmKey' => 'spring_sale_meta',
91 + 'utmKey' => 'base_price_meta',
91 92 ),
92 -
93 - // Flash sale
94 - array(
95 - 'start' => '2026-05-07 00:00 Asia/Dhaka',
96 - 'end' => '2026-05-21 23:59 Asia/Dhaka',
97 - 'text' => __(
98 - 'Flash Sale - Up to 45% OFF',
99 - 'ultimate-post'
100 - ),
101 - 'utmKey' => 'flash_sale_meta',
102 - ),
103 -
104 - // Surprise Sale
105 - array(
106 - 'start' => '2026-05-22 00:00 Asia/Dhaka',
107 - 'end' => '2026-06-01 23:59 Asia/Dhaka',
108 - 'text' => __(
109 - 'Surprise Sale - Up to 50% OFF',
110 - 'ultimate-post'
111 - ),
112 - 'utmKey' => 'surprise_sale_meta',
113 - ),
114 -
115 - // Massive Sale
116 - array(
117 - 'start' => '2026-06-02 00:00 Asia/Dhaka',
118 - 'end' => '2026-06-20 23:59 Asia/Dhaka',
119 - 'text' => __(
120 - 'Massive Sale - Up to 50% OFF',
121 - 'ultimate-post'
122 - ),
123 - 'utmKey' => 'massive_sale_meta',
124 - ),
125 -
126 - // Final hours sale
127 - array(
128 - 'start' => '2026-06-21 00:00 Asia/Dhaka',
129 - 'end' => '2026-06-30 23:59 Asia/Dhaka',
130 - 'text' => __(
131 - 'Final Hours Sale - Up to 50% OFF',
132 - 'ultimate-post'
133 - ),
134 - 'utmKey' => 'final_hour_meta',
135 - ),
136 93 );
137 94
138 95 $setting_link = array(
139 96 'ultp_options' => '<a href="' . esc_url( admin_url( 'admin.php?page=ultp-settings#startersites' ) ) . '">' . esc_html__( 'Starter Sites', 'ultimate-post' ) . '</a>',
@@ -151,9 +108,13 @@
151 108 $url = 'https://account.wpxpo.com/checkout/?edd_license_key=' . $license_key;
152 109 } else {
153 110
154 111 $text = esc_html__( 'Upgrade to Pro', 'ultimate-post' );
155 - $url = Xpo::generate_utm_link();
112 + $url = Xpo::generate_utm_link(
113 + array(
114 + 'utmKey' => 'sub_menu',
115 + )
116 + );
156 117
157 118 foreach ( $offer_config as $offer ) {
158 119 $current_time = gmdate( 'U' );
159 120 $notice_start = gmdate( 'U', strtotime( $offer['start'] ) );
@@ -240,10 +201,10 @@
240 201 $pro_link_text = '';
241 202
242 203 // Check if current date is between November 5th and December 10th
243 204 $current_date = current_time( 'Y-m-d' );
244 - $start_date = date( 'Y' ) . '-01-01'; // January 1st of current year
245 - $end_date = date( 'Y' ) . '-02-15'; // February 15th of current year
205 + $start_date = gmdate( 'Y' ) . '-01-01'; // January 1st of current year
206 + $end_date = gmdate( 'Y' ) . '-02-15'; // February 15th of current year
246 207 $menu_pro_text_period = ( $current_date >= $start_date && $current_date <= $end_date );
247 208
248 209 if ( ! Xpo::is_lc_active() ) {
249 210 $pro_link = Xpo::generate_utm_link(
@@ -289,8 +250,46 @@
289 250 );
290 251 }
291 252
292 253 /**
254 + * Sync addon-backed WordPress submenu items with addon enabled status.
255 + *
256 + * @since v.4.1.7
257 + * @return void No return value.
258 + */
259 + public function sync_addon_submenu_visibility() {
260 + $settings = ultimate_post()->get_setting();
261 + $submenus = array(
262 + 'builder' => 'ultp_builder',
263 + 'saved-templates' => 'ultp_templates',
264 + 'custom-font' => 'ultp_custom_font',
265 + );
266 +
267 + foreach ( $submenus as $slug => $setting_key ) {
268 + $submenus[ $slug ] = isset( $settings[ $setting_key ] ) && $settings[ $setting_key ] !== 'false';
269 + }
270 + ?>
271 + <script>
272 + ( function() {
273 + const postxAddonSubmenus = <?php echo wp_json_encode( $submenus ); ?>;
274 +
275 + Object.keys( postxAddonSubmenus ).forEach( function( slug ) {
276 + const link = document.querySelector( '#adminmenu a[href*="page=ultp-settings#' + slug + '"]' );
277 + const item = link ? link.closest( 'li' ) : null;
278 +
279 + if ( ! item ) {
280 + return;
281 + }
282 +
283 + item.id = 'postx-submenu-' + slug;
284 + item.style.display = postxAddonSubmenus[ slug ] ? '' : 'none';
285 + } );
286 + }() );
287 + </script>
288 + <?php
289 + }
290 +
291 + /**
293 292 * Handle external redirects for menu and pro links.
294 293 *
295 294 * @since v.1.0.0
296 295 * @return void No return value.
@@ -298,13 +297,14 @@
298 297 public function handle_external_redirects() {
299 298 if (empty($_GET['page'])) { // @codingStandardsIgnoreLine
300 299 return;
301 300 }
302 - $_page = sanitize_key( $_GET['page'] );
301 + $_page = sanitize_key( $_GET['page'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Read-only admin page slug.
303 302 if ('ultp-startersites' === $_page) { // @codingStandardsIgnoreLine
304 - exit( wp_safe_redirect( admin_url( 'admin.php?page=ultp-settings#startersites' ) ) );
303 + wp_safe_redirect( admin_url( 'admin.php?page=ultp-settings#startersites' ) );
304 + exit;
305 305 } else if ('go_postx_pro' === $_page) { // @codingStandardsIgnoreLine
306 - wp_redirect(
306 + wp_redirect( // phpcs:ignore WordPress.Security.SafeRedirect.wp_redirect_wp_redirect -- Intentional redirect to the fixed wpxpo.com pricing URL.
307 307 Xpo::generate_utm_link(
308 308 array(
309 309 'utmKey' => 'dashboard_go_pro',
310 310 )