ivory_search = true; } if ( null !== $is ) { $this->opt = $is; } else { $this->opt = Ivory_Search::load_options(); } } /** * Gets the instance of this class. * * @return self */ public static function getInstance() { if ( !self::$_instance instanceof self ) { self::$_instance = new self(); } return self::$_instance; } /** * Displays settings sections having custom markup. */ public function is_do_settings_sections( $page, $sec ) { global $wp_settings_sections, $wp_settings_fields ; if ( !isset( $wp_settings_sections[$page] ) ) { return; } $section = (array) $wp_settings_sections[$page][$sec]; if ( $section['title'] ) { echo "

{$section['title']}

\n" ; } if ( $section['callback'] ) { call_user_func( $section['callback'], $section ); } if ( !isset( $wp_settings_fields ) || !isset( $wp_settings_fields[$page] ) || !isset( $wp_settings_fields[$page][$section['id']] ) ) { return; } echo '
' ; $this->is_do_settings_fields( $page, $section['id'] ); echo '
' ; } /** * Displays settings fields having custom markup. */ public function is_do_settings_fields( $page, $section ) { global $wp_settings_fields ; if ( !isset( $wp_settings_fields[$page][$section] ) ) { return; } foreach ( (array) $wp_settings_fields[$page][$section] as $field ) { $class = ''; if ( !empty($field['args']['class']) ) { $class = ' class="' . esc_attr( $field['args']['class'] ) . '"'; } if ( !empty($field['args']['label_for']) ) { echo '

' ; } else { echo '

' . $field['title'] ; } echo '' . esc_html__( 'Expand All', 'ivory-search' ) . '

' ; call_user_func( $field['callback'], $field['args'] ); echo '
' ; } } /** * Registers plugin settings fields. */ function register_settings_fields() { if ( !empty($GLOBALS['pagenow']) && 'options.php' === $GLOBALS['pagenow'] ) { if ( isset( $_POST['is_settings'] ) ) { add_filter( 'whitelist_options', function ( $whitelist_options ) { $whitelist_options['ivory_search'][0] = 'is_settings'; return $whitelist_options; } ); } } if ( !isset( $_GET['tab'] ) || 'menu-search' == $_GET['tab'] ) { add_settings_section( 'ivory_search_section', '', array( $this, 'menu_search_section_desc' ), 'ivory_search' ); add_settings_field( 'ivory_search_locations', __( 'Select Menu', 'ivory-search' ), array( $this, 'menu_locations' ), 'ivory_search', 'ivory_search_section' ); add_settings_field( 'ivory_search_form', __( 'Search Form', 'ivory-search' ), array( $this, 'menu_search_form' ), 'ivory_search', 'ivory_search_section' ); add_settings_field( 'ivory_search_style', __( 'Form Style', 'ivory-search' ), array( $this, 'menu_form_style' ), 'ivory_search', 'ivory_search_section' ); add_settings_field( 'ivory_search_title', __( 'Menu Title', 'ivory-search' ), array( $this, 'menu_title' ), 'ivory_search', 'ivory_search_section' ); add_settings_field( 'ivory_search_classes', __( 'Menu Classes', 'ivory-search' ), array( $this, 'menu_classes' ), 'ivory_search', 'ivory_search_section' ); add_settings_field( 'ivory_search_gcse', __( 'Google CSE', 'ivory-search' ), array( $this, 'menu_google_cse' ), 'ivory_search', 'ivory_search_section' ); add_settings_field( 'ivory_search_close_icon', __( 'Close Icon', 'ivory-search' ), array( $this, 'menu_close_icon' ), 'ivory_search', 'ivory_search_section' ); register_setting( 'ivory_search', 'is_menu_search' ); } else { if ( isset( $_GET['tab'] ) && 'settings' == $_GET['tab'] ) { add_settings_section( 'ivory_search_settings', '', array( $this, 'settings_section_desc' ), 'ivory_search' ); add_settings_field( 'ivory_search_header', __( 'Header Search', 'ivory-search' ), array( $this, 'header' ), 'ivory_search', 'ivory_search_settings' ); add_settings_field( 'ivory_search_footer', __( 'Footer Search', 'ivory-search' ), array( $this, 'footer' ), 'ivory_search', 'ivory_search_settings' ); add_settings_field( 'ivory_search_display_in_header', __( 'Mobile Search', 'ivory-search' ), array( $this, 'menu_search_in_header' ), 'ivory_search', 'ivory_search_settings' ); add_settings_field( 'ivory_search_css', __( 'Custom CSS', 'ivory-search' ), array( $this, 'custom_css' ), 'ivory_search', 'ivory_search_settings' ); add_settings_field( 'ivory_search_stopwords', __( 'Stopwords', 'ivory-search' ), array( $this, 'stopwords' ), 'ivory_search', 'ivory_search_settings' ); add_settings_field( 'ivory_search_synonyms', __( 'Synonyms', 'ivory-search' ), array( $this, 'synonyms' ), 'ivory_search', 'ivory_search_settings' ); add_settings_field( 'not_load_files', __( 'Do Not Load Plugin Files', 'ivory-search' ), array( $this, 'plugin_files' ), 'ivory_search', 'ivory_search_settings' ); add_settings_field( 'ivory_search_disable', __( 'Disable Search', 'ivory-search' ), array( $this, 'disable' ), 'ivory_search', 'ivory_search_settings' ); add_settings_field( 'ivory_search_default', __( 'Default Search', 'ivory-search' ), array( $this, 'default_search' ), 'ivory_search', 'ivory_search_settings' ); register_setting( 'ivory_search', 'is_settings' ); } } } /** * Displays Search To Menu section description text. */ function menu_search_section_desc() { echo '

' . __( 'Display search in menu and configure it using below options.', 'ivory-search' ) . '

' ; } /** * Displays Settings section description text. */ function settings_section_desc() { echo '

' . __( 'Make search changes on entire website using below options.', 'ivory-search' ) . '

' ; } /** * Displays choose menu locations field. */ function menu_locations() { $content = __( 'Display search form on selected menu.', 'ivory-search' ); IS_Help::help_info( $content ); $html = ''; $menus = get_registered_nav_menus(); if ( !empty($menus) ) { $check_value = ''; foreach ( $menus as $location => $description ) { if ( $this->ivory_search ) { $check_value = ( isset( $this->opt['menus'][$location] ) ? $this->opt['menus'][$location] : 0 ); } else { $check_value = ( isset( $this->opt['add_search_to_menu_locations'][$location] ) ? $this->opt['add_search_to_menu_locations'][$location] : 0 ); } $html .= '

'; } } else { $html = __( 'Navigation menu location is not registered on the site.', 'ivory-search' ); } echo '
' . $html . '
' ; } /** * Displays menu search form field. */ function menu_search_form() { $content = __( 'Select search form that will control menu search functionality.', 'ivory-search' ); IS_Help::help_info( $content ); $html = '

'; $form_disable = ( is_fs()->is_plan_or_trial( 'pro' ) && $this->is_premium_plugin ? false : true ); if ( $form_disable ) { $html .= IS_Admin::pro_link(); } $args = array( 'numberposts' => -1, 'post_type' => 'is_search_form', 'order' => 'ASC', ); $posts = get_posts( $args ); if ( !empty($posts) ) { $check_value = ( isset( $this->opt['menu_search_form'] ) ? $this->opt['menu_search_form'] : 0 ); $check_value = ( $check_value ? $check_value : 'default' ); $select_disable = ( $form_disable ? 'disabled' : '' ); $html .= ''; if ( $check_value && get_post_type( $check_value ) ) { $html .= ' ' . esc_html__( "Edit", 'ivory-search' ) . ''; } else { $html .= ' ' . esc_html__( "Create New", 'ivory-search' ) . ''; } } echo '

' . $html . '
' ; } /** * Displays form style field. */ function menu_form_style() { $content = __( 'Select menu search form style.', 'ivory-search' ); IS_Help::help_info( $content ); $styles = array( 'default' => __( 'Default', 'ivory-search' ), 'dropdown' => __( 'Dropdown', 'ivory-search' ), 'sliding' => __( 'Sliding', 'ivory-search' ), 'full-width-menu' => __( 'Full Width', 'ivory-search' ), 'popup' => __( 'Popup', 'ivory-search' ), ); $popup_disable = ( is_fs()->is_plan_or_trial( 'pro' ) && $this->is_premium_plugin ? false : true ); if ( empty($this->opt) || !isset( $this->opt['add_search_to_menu_style'] ) && !isset( $this->opt['menu_style'] ) ) { $this->opt['menu_style'] = 'default'; } $html = ''; $check_value = ( isset( $this->opt['add_search_to_menu_style'] ) ? $this->opt['add_search_to_menu_style'] : 'default' ); $check_value = ( isset( $this->opt['menu_style'] ) ? $this->opt['menu_style'] : $check_value ); foreach ( $styles as $key => $style ) { if ( $popup_disable && 'popup' === $key ) { $html .= '

' . IS_Admin::pro_link(); } else { $html .= '

'; } $html .= ''; $html .= '

'; } echo '
' . $html . '
' ; } /** * Displays search menu title field. */ function menu_title() { $content = __( 'Add menu title to display in place of search icon.', 'ivory-search' ); IS_Help::help_info( $content ); $this->opt['add_search_to_menu_title'] = ( isset( $this->opt['add_search_to_menu_title'] ) ? $this->opt['add_search_to_menu_title'] : '' ); $this->opt['menu_title'] = ( isset( $this->opt['menu_title'] ) ? $this->opt['menu_title'] : $this->opt['add_search_to_menu_title'] ); $html = ''; echo '
' . $html . '
' ; } /** * Displays search menu classes field. */ function menu_classes() { $content = __( 'Add class to search form menu item.', 'ivory-search' ); IS_Help::help_info( $content ); $this->opt['add_search_to_menu_classes'] = ( isset( $this->opt['add_search_to_menu_classes'] ) ? $this->opt['add_search_to_menu_classes'] : '' ); $this->opt['menu_classes'] = ( isset( $this->opt['menu_classes'] ) ? $this->opt['menu_classes'] : $this->opt['add_search_to_menu_classes'] ); $html = ''; $html .= '
'; echo '
' . $html . '
' ; } /** * Displays google cse field. */ function menu_google_cse() { $content = __( 'Add Google Custom Search( CSE ) search form code that will replace default search form.', 'ivory-search' ); IS_Help::help_info( $content ); $this->opt['add_search_to_menu_gcse'] = ( isset( $this->opt['add_search_to_menu_gcse'] ) ? $this->opt['add_search_to_menu_gcse'] : '' ); $this->opt['menu_gcse'] = ( isset( $this->opt['menu_gcse'] ) ? $this->opt['menu_gcse'] : $this->opt['add_search_to_menu_gcse'] ); $html = ''; echo '
' . $html . '
' ; } /** * Displays search form close icon field. */ function menu_close_icon() { $check_value = ( isset( $this->opt['add_search_to_menu_close_icon'] ) ? $this->opt['add_search_to_menu_close_icon'] : 0 ); $check_string = checked( 'add_search_to_menu_close_icon', $check_value, false ); if ( $this->ivory_search ) { $check_value = ( isset( $this->opt['menu_close_icon'] ) ? $this->opt['menu_close_icon'] : 0 ); $check_string = checked( 'menu_close_icon', $check_value, false ); } $html = ''; echo '
' . $html . '
' ; } /** * Displays search form in site header. */ function header() { $content = __( 'Select search form to display in site header.', 'ivory-search' ); IS_Help::help_info( $content ); $html = ''; $args = array( 'numberposts' => -1, 'post_type' => 'is_search_form', ); $posts = get_posts( $args ); if ( !empty($posts) ) { $check_value = ( isset( $this->opt['header_search'] ) ? $this->opt['header_search'] : 0 ); $html .= ''; if ( $check_value && get_post_type( $check_value ) ) { $html .= ' ' . esc_html__( "Edit", 'ivory-search' ) . ''; } else { $html .= ' ' . esc_html__( "Create New", 'ivory-search' ) . ''; } } echo '
' . $html . '
' ; } /** * Displays search form in site footer. */ function footer() { $content = __( 'Select search form to display in site footer.', 'ivory-search' ); IS_Help::help_info( $content ); $html = ''; $args = array( 'numberposts' => -1, 'post_type' => 'is_search_form', ); $posts = get_posts( $args ); if ( !empty($posts) ) { $check_value = ( isset( $this->opt['footer_search'] ) ? $this->opt['footer_search'] : 0 ); $html .= ''; if ( $check_value && get_post_type( $check_value ) ) { $html .= ' ' . esc_html__( "Edit", 'ivory-search' ) . ''; } else { $html .= ' ' . esc_html__( "Create New", 'ivory-search' ) . ''; } } echo '
' . $html . '
' ; } /** * Displays display in header field. */ function menu_search_in_header() { $check_value = ( isset( $this->opt['add_search_to_menu_display_in_header'] ) ? $this->opt['add_search_to_menu_display_in_header'] : 0 ); $check_string = checked( 'add_search_to_menu_display_in_header', $check_value, false ); if ( $this->ivory_search ) { $check_value = ( isset( $this->opt['header_menu_search'] ) ? $this->opt['header_menu_search'] : 0 ); $check_string = checked( 'header_menu_search', $check_value, false ); } $html = ''; echo '
' . $html . '

' ; $html = ''; $content = __( 'If this site uses cache then please select the below option to display search form on mobile.', 'ivory-search' ); IS_Help::help_info( $content ); $check_value = ( isset( $this->opt['astm_site_uses_cache'] ) ? $this->opt['astm_site_uses_cache'] : 0 ); $check_string = checked( 'astm_site_uses_cache', $check_value, false ); if ( $this->ivory_search ) { $check_value = ( isset( $this->opt['site_uses_cache'] ) ? $this->opt['site_uses_cache'] : 0 ); $check_string = checked( 'site_uses_cache', $check_value, false ); } $html .= ''; echo '
' . $html . '
' ; } /** * Displays custom css field. */ function custom_css() { $content = __( 'Add custom css code.', 'ivory-search' ); IS_Help::help_info( $content ); $this->opt['add_search_to_menu_css'] = ( isset( $this->opt['add_search_to_menu_css'] ) ? $this->opt['add_search_to_menu_css'] : '' ); $this->opt['custom_css'] = ( isset( $this->opt['custom_css'] ) ? $this->opt['custom_css'] : $this->opt['add_search_to_menu_css'] ); $html = ''; echo '
' . $html . '
' ; } /** * Displays stopwords field. */ function stopwords() { $content = __( 'Enter stopwords here that will not be searched.', 'ivory-search' ); IS_Help::help_info( $content ); $this->opt['stopwords'] = ( isset( $this->opt['stopwords'] ) ? $this->opt['stopwords'] : '' ); $html = ''; $html .= '
'; echo '
' . $html . '
' ; } /** * Displays synonyms field. */ function synonyms() { $content = __( 'Add synonyms here to make the searches find better results.', 'ivory-search' ); $content .= '

' . __( 'If you add bird = crow to the list of synonyms, searches for bird automatically become a search for bird crow and will thus match to posts that include either bird or crow.', 'ivory-search' ); IS_Help::help_info( $content ); $this->opt['synonyms'] = ( isset( $this->opt['synonyms'] ) ? $this->opt['synonyms'] : '' ); $html = ''; $html .= '
'; $html .= '
'; echo '
' . $html . '
' ; $html = ''; $content = __( 'This only works for search forms configured to search any of the search terms(OR) and not all search terms(AND).', 'ivory-search' ); IS_Help::help_info( $content ); $synonyms_disable = ( is_fs()->is_plan_or_trial( 'pro' ) && $this->is_premium_plugin ? '' : ' disabled ' ); $check_value = ( isset( $this->opt['synonyms_and'] ) ? $this->opt['synonyms_and'] : 0 ); $disable = checked( 1, $check_value, false ); if ( '' !== $synonyms_disable ) { $html .= '

' . IS_Admin::pro_link(); } else { $html .= '

'; } $html .= '

'; echo '
' . $html . '
' ; } /** * Displays do not load plugin files field. */ function plugin_files() { $content = __( 'Enable below options to disable loading of plugin CSS and JavaScript files.', 'ivory-search' ); IS_Help::help_info( $content ); $styles = array( 'css' => __( 'Plugin CSS files', 'ivory-search' ), 'js' => __( 'Plugin JavaScript files', 'ivory-search' ), ); $html = ''; foreach ( $styles as $key => $file ) { $check_value = ( isset( $this->opt['do_not_load_plugin_files']["plugin-{$key}-file"] ) ? $this->opt['do_not_load_plugin_files']["plugin-{$key}-file"] : 0 ); $check_string = checked( "plugin-{$key}-file", $check_value, false ); if ( $this->ivory_search ) { $check_value = ( isset( $this->opt['not_load_files'][$key] ) ? $this->opt['not_load_files'][$key] : 0 ); $check_string = checked( $key, $check_value, false ); } $html .= ''; if ( 'css' == $key ) { $html .= '
'; $html .= '
' . plugins_url( '/public/css/ivory-search.css', IS_PLUGIN_FILE ) . ''; $html .= '

'; } else { $html .= '
'; $html .= '
' . plugins_url( '/public/js/ivory-search.js', IS_PLUGIN_FILE ) . ''; $html .= '
' . plugins_url( '/public/js/is-highlight.js', IS_PLUGIN_FILE ) . ''; } } echo '
' . $html . '
' ; } /** * Disables search functionality on whole site. */ function disable() { $check_value = ( isset( $this->opt['disable'] ) ? $this->opt['disable'] : 0 ); $disable = checked( 1, $check_value, false ); $html = ''; echo '
' . $html . '
' ; } /** * Controls default search functionality. */ function default_search() { $check_value = ( isset( $this->opt['default_search'] ) ? $this->opt['default_search'] : 0 ); $disable = checked( 1, $check_value, false ); $html = ''; echo '
' . $html . '
' ; } }