dispatch_insights(); $self->dispatch_hooks(); // Add hooks. add_filter( 'allowed_redirect_hosts', array( $self, 'add_white_listed_redirect_hosts' ) ); add_filter( 'display_post_states', array( $self, 'add_display_post_states' ), 10, 2 ); add_filter( 'theme_page_templates', [ $self, 'load_page_templates' ] ); add_action( 'admin_init', [ $self, 'prevent_admin_access' ] ); add_action( 'current_screen', [ $self, 'conditional_loaded' ] ); add_filter( 'admin_init', array( $self, 'redirect_storeengine_product' ) ); } public function dispatch_hooks() { add_filter( 'plugin_action_links_' . STOREENGINE_PLUGIN_BASENAME, [ $this, 'plugin_action_links' ] ); } public function plugin_action_links( $links ) { $settings_link = sprintf( '%2$s', admin_url( 'admin.php?page=storeengine-settings' ), esc_html__( 'Settings', 'storeengine' ) ); array_unshift( $links, $settings_link ); if ( ! defined( 'STOREENGINE_PRO_VERSION' ) ) { $links['go_pro'] = sprintf( '%2$s', 'https://storeengine.pro/pricing/', esc_html__( 'Get StoreEngine Pro', 'storeengine' ) ); } return $links; } public function add_white_listed_redirect_hosts( $hosts ) { $hosts[] = 'storeengine.pro'; return $hosts; } public function add_display_post_states( $post_states, $post ) { if ( (int) Helper::get_settings( 'shop_page' ) === $post->ID ) { $post_states['storeengine_page_for_shop_page'] = __( 'StoreEngine Shop Page', 'storeengine' ); } if ( (int) Helper::get_settings( 'cart_page' ) === $post->ID ) { $post_states['storeengine_page_for_cart_page'] = __( 'StoreEngine Cart Page', 'storeengine' ); } if ( (int) Helper::get_settings( 'checkout_page' ) === $post->ID ) { $post_states['storeengine_page_for_checkout_page'] = __( 'StoreEngine Checkout Page', 'storeengine' ); } if ( (int) Helper::get_settings( 'thankyou_page' ) === $post->ID ) { $post_states['storeengine_page_for_thankyou_page'] = __( 'StoreEngine Thank You Page', 'storeengine' ); } if ( (int) Helper::get_settings( 'dashboard_page' ) === $post->ID ) { $post_states['storeengine_page_for_dashboard_page'] = __( 'StoreEngine Dashboard Page', 'storeengine' ); } return $post_states; } public function load_page_templates( $templates ) { // Page editor error (non-fse theme) Updating failed. Invalid parameter(s): template // https://github.com/Automattic/sensei/issues/7215 // https://github.com/Automattic/wp-calypso/issues/59570 // https://forum.muffingroup.com/betheme/discussion/51757/creating-a-custom-template $templates['storeengine-canvas.php'] = esc_html__( 'StoreEngine Canvas', 'storeengine' ); return $templates; } public function prevent_admin_access() { $prevent_access = false; // Do not interfere with admin-post or admin-ajax requests. $exempted_paths = [ 'admin-post.php', 'admin-ajax.php' ]; if ( apply_filters( 'storeengine/disable_admin_bar', true ) && isset( $_SERVER['SCRIPT_FILENAME'] ) && ! in_array( basename( sanitize_text_field( wp_unslash( $_SERVER['SCRIPT_FILENAME'] ) ) ), $exempted_paths, true ) ) { $has_cap = false; $access_caps = [ 'edit_posts', 'manage_storeengine', 'view_admin_dashboard' ]; foreach ( $access_caps as $access_cap ) { if ( current_user_can( $access_cap ) ) { $has_cap = true; break; } } if ( ! $has_cap ) { $prevent_access = true; } if ( 'storeengine_customer' === reset( wp_get_current_user()->roles ) ) { $prevent_access = true; } } if ( apply_filters( 'storeengine/prevent_admin_access', $prevent_access ) ) { wp_safe_redirect( Helper::get_dashboard_url() ); exit; } } public function conditional_loaded() { $screen = get_current_screen(); if ( ! $screen ) { return; } if ( $screen->id == 'storeengine_page_storeengine-get-pro' ) { $link = add_query_arg( [ 'utm_source' => 'storeengine-plugin', 'utm_medium' => 'admin-dashboard', 'utm_campaign' => 'upgrade-to-pro', 'utm_content' => 'get-pro-button', 'utm_term' => 'free-user', 'locale' => get_locale(), ], 'https://storeengine.pro/pricing' ); wp_safe_redirect( $link ); exit; } if ( 'options-permalink' === $screen->id ) { Admin\PermalinkSettings::init(); } } public function dispatch_insights() { Admin\Insights::init( 'https://kodezen.com', STOREENGINE_PLUGIN_SLUG, 'plugin', STOREENGINE_VERSION, [ 'logo' => STOREENGINE_ASSETS_URI . 'images/logo.svg', // default logo URL 'optin_message' => 'Help improve StoreEngine! Allow anonymous usage tracking?', 'deactivation_message' => 'If you have a moment, please share why you are deactivating StoreEngine:', 'deactivation_reasons' => [ 'no_longer_needed' => [ 'label' => 'I no longer need the plugin', ], 'found_a_better_plugin' => [ 'label' => 'I found a better plugin', 'has_custom_reason' => true, 'custom_reason_placeholder' => 'Please share which plugin', ], 'couldnt_get_the_plugin_to_work' => [ 'label' => 'I couldn\'t get the plugin to work', ], 'temporary_deactivation' => [ 'label' => 'It\'s a temporary deactivation', ], 'have_storeengine_pro' => [ 'label' => 'I have StoreEngine Pro', 'toggle_text' => 'Wait! Don\'t deactivate StoreEngine. You have to activate both StoreEngine and StoreEngine Pro in order for the plugin to work.', ], 'other' => [ 'label' => 'Other', 'has_custom_reason' => true, 'custom_reason_placeholder' => 'Please share the reason', ], ], ] ); } public function redirect_storeengine_product() { global $pagenow; $post_type = isset( $_GET['post_type'] ) ? sanitize_key( $_GET['post_type'] ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended if ( 'edit.php' === $pagenow && $post_type && 'storeengine_product' === $post_type ) { $new_url = admin_url( 'admin.php?page=storeengine-products' ); wp_safe_redirect( $new_url ); exit; } } }