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 '';
}
}