esc_html__( 'Live Search', 'searchwp-live-ajax-search' ), 'menu_slug' => self::MENU_SLUG, 'position' => 40, ]; return $submenu_pages; } /** * Get arguments to populate the submenus if SearchWP is disabled. * Items are sorted by the 'position' value. * * @since 1.7.3 * * @return array */ private static function get_submenu_pages_args_searchwp_disabled() { $submenu_pages = [ 'settings' => [ 'menu_title' => esc_html__( 'Live Search', 'searchwp-live-ajax-search' ), 'menu_slug' => self::MENU_SLUG, 'position' => 10, ], ]; $submenu_pages = (array) apply_filters( 'searchwp_live_search_options_submenu_pages', $submenu_pages ); uasort( $submenu_pages, function ( $a, $b ) { if ( ! isset( $a['position'] ) ) { return 1; } if ( ! isset( $b['position'] ) ) { return -1; } return ( $a['position'] < $b['position'] ) ? -1 : 1; } ); return $submenu_pages; } /** * Add menus if SearchWP is disabled. * * @since 1.7.0 */ public function add_menus_searchwp_disabled() { $capability = Settings_Api::get_capability(); if ( ! current_user_can( $capability ) ) { return; } $page_title = esc_html__( 'SearchWP', 'searchwp-live-ajax-search' ); $submenu_pages = self::get_submenu_pages_args_searchwp_disabled(); $menu_page = reset( $submenu_pages ); $settings = searchwp_live_search()->get( 'Settings' ); // Default SearchWP top level menu item. add_menu_page( $page_title, $page_title, $capability, $menu_page['menu_slug'], [ $settings, 'page_searchwp_disabled' ], 'data:image/svg+xml;base64,' . base64_encode( $this->get_dashicon() ), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode apply_filters( 'searchwp\admin_menu\position', '58.9' ) ); foreach ( $submenu_pages as $submenu_page ) { add_submenu_page( $menu_page['menu_slug'], $submenu_page['page_title'] ?? $page_title, $submenu_page['menu_title'], $submenu_page['capability'] ?? $capability, $submenu_page['menu_slug'], $submenu_page['function'] ?? [ $settings, 'page_searchwp_disabled' ] ); } } /** * Add "Upgrade to Pro" menu link if SearchWP is disabled. * * @since 1.7.2 * * @param array $submenu_pages List of registered SearchWP submenu pages. * * @return array */ public function add_upgrade_pro_link_searchwp_disabled( $submenu_pages ) { $submenu_pages['upgrade_to_pro'] = [ 'menu_title' => esc_html__( 'Upgrade to Pro', 'searchwp-live-ajax-search' ), 'menu_slug' => esc_url( 'https://searchwp.com/?utm_source=WordPress&utm_medium=Admin+Menu+Upgrade+Link&utm_campaign=Live+Ajax+Search&utm_content=Upgrade+to+Pro' ), 'position' => 100, 'function' => '', ]; // Enqueue the menu script only if the menu is registered. $this->enqueues_searchwp_disabled(); return $submenu_pages; } /** * Enqueue assets if SearchWP is disabled. * * @since 1.7.0 */ private function enqueues_searchwp_disabled() { wp_enqueue_script( 'searchwp-live-search-admin-menu', SEARCHWP_LIVE_SEARCH_PLUGIN_URL . 'assets/js/admin/menu.js', [ 'jquery' ], SEARCHWP_LIVE_SEARCH_VERSION, true ); } /** * Style "Upgrade to Pro" menu link if SearchWP is disabled. * * @since 1.7.0 */ public function style_upgrade_pro_link_searchwp_disabled() { global $submenu; $menu_slug = ''; if ( isset( $submenu[ self::MENU_SLUG ] ) ) { $menu_slug = self::MENU_SLUG; } $notifications_slug = self::MENU_SLUG . '#notifications'; if ( isset( $submenu[ $notifications_slug ] ) ) { $menu_slug = $notifications_slug; } if ( empty( $menu_slug ) ) { return; } $menu_keys = array_keys( $submenu[ $menu_slug ] ); $upgrade_item_key = array_pop( $menu_keys ); // 0 = menu_title, 1 = capability, 2 = menu_slug, 3 = page_title, 4 = classes. if ( strpos( $submenu[ $menu_slug ][ $upgrade_item_key ][2], 'https://searchwp.com/' ) !== 0 ) { return; } // Prepare a HTML class. // phpcs:disable WordPress.WP.GlobalVariablesOverride.Prohibited if ( isset( $submenu[ $menu_slug ][ $upgrade_item_key ][4] ) ) { $submenu[ $menu_slug ][ $upgrade_item_key ][4] .= ' searchwp-sidebar-upgrade-pro'; } else { $submenu[ $menu_slug ][ $upgrade_item_key ][] = 'searchwp-sidebar-upgrade-pro'; } // phpcs:enable WordPress.WP.GlobalVariablesOverride.Prohibited echo ''; } /** * Get SearchWP dashicon SVG. * * @since 1.7.0 */ private function get_dashicon() { return ' '; } }