=> 'textarea', 'desc' => __( 'Synonyms should be separated by a comma. Each new synonyms group is entered on a new line. You can use a phrase instead of a single word.

Sample list:

sofa, couch, davenport, divan, settee
big, grand, great, large, outsize
', 'ajax-search-for-woocommerce' ), 'class' => 'dgwt-wcas-settings-synonyms js-dgwt-wcas-adv-settings dgwt-wcas-premium-only', ), 600 => array( 'name' => 'filter_products_head', 'label' => __( 'Exclude/include products', 'ajax-search-for-woocommerce' ), 'type' => 'head', 'class' => 'dgwt-wcas-sgs-header js-dgwt-wcas-adv-settings', ), 625 => array( 'name' => 'filter_products_mode', 'label' => __( 'Filtering mode', 'ajax-search-for-woocommerce' ) . ' ' . Helpers::createQuestionMark( 'filter_products_mode', __( 'Exclude the product group from the search results or allow search only among the indicated product group', 'ajax-search-for-woocommerce' ), '', 'right' ), 'class' => 'js-dgwt-wcas-adv-settings dgwt-wcas-premium-only', 'type' => 'select', 'options' => array( 'exclude' => __( 'Exclude', 'ajax-search-for-woocommerce' ), 'include' => __( 'Include', 'ajax-search-for-woocommerce' ), ), 'default' => 'exclude', ), 650 => array( 'name' => 'filter_products_rules', 'label' => __( 'Filters', 'ajax-search-for-woocommerce' ) . ' ' . Helpers::createQuestionMark( 'filter_products_head', __( 'Filters that specify the product group that will be affected by the above mode', 'ajax-search-for-woocommerce' ), '', 'right' ), 'type' => 'filters_rules_plug', 'class' => 'js-dgwt-wcas-adv-settings dgwt-wcas-premium-only', 'default' => '[]', ), ) ), 'dgwt_wcas_performance' => apply_filters( 'dgwt/wcas/settings/section=performance', array( 0 => array( 'name' => 'pro_features', 'label' => __( 'Pro features', 'ajax-search-for-woocommerce' ), 'type' => 'desc', 'desc' => Helpers::featuresHtml(), ), 10 => array( 'name' => 'search_engine_head', 'label' => __( 'Speed up search!', 'ajax-search-for-woocommerce' ), 'type' => 'head', 'class' => 'dgwt-wcas-sgs-header', ), 100 => array( 'name' => 'indexer_schedule_head', 'label' => __( 'Scheduling indexing', 'ajax-search-for-woocommerce' ), 'type' => 'head', 'class' => 'dgwt-wcas-sgs-header js-dgwt-wcas-adv-settings', ), 110 => array( 'name' => 'indexer_schedule', 'label' => __( 'Enable Scheduler', 'ajax-search-for-woocommerce' ) . ' ' . Helpers::createQuestionMark( 'indexer-schedule', __( "In most cases, you don't need to use the scheduler because the search index updates when you edit products. If you use import tools or custom code to refresh prices or bulk add/edit products, the indexing scheduler will be helpful.", 'ajax-search-for-woocommerce' ) ), 'type' => 'checkbox', 'size' => 'small', 'class' => 'dgwt-wcas-options-cb-toggle js-dgwt-wcas-cbtgroup-indexer-schedule js-dgwt-wcas-adv-settings dgwt-wcas-premium-only', 'default' => 'off', ), 120 => array( 'name' => 'indexer_schedule_interval', 'label' => __( 'Interval', 'ajax-search-for-woocommerce' ), 'type' => 'select', 'class' => 'js-dgwt-wcas-cbtgroup-indexer-schedule js-dgwt-wcas-adv-settings dgwt-wcas-premium-only', 'options' => array( 'daily' => __( 'daily', 'ajax-search-for-woocommerce' ), 'weekly' => __( 'weekly', 'ajax-search-for-woocommerce' ), ), 'default' => 'weekly', ), 130 => array( 'name' => 'indexer_schedule_start_time', 'label' => __( 'Schedule time', 'ajax-search-for-woocommerce' ), 'type' => 'select', 'class' => 'js-dgwt-wcas-cbtgroup-indexer-schedule js-dgwt-wcas-adv-settings dgwt-wcas-premium-only', 'options' => Helpers::getHours(), 'default' => 3, ), ) ), ); $fuzzinesText1 = '' . __( 'Increases sales conversions', 'ajax-search-for-woocommerce' ) . ''; $fuzzinesText2 = sprintf( __( 'Returns suggestions based on likely relevance, even though a search keyword may not exactly match. E.g if you type “iphome” you get the same results as for “iphone”. Read more about fuzzy search feature.', 'ajax-search-for-woocommerce' ), $fuzzySearchLink ); if ( dgoraAsfwFs()->is_premium() ) { } else { // Fuzzy search feature preview $settingsFields['dgwt_wcas_search'][450] = array( 'name' => 'fuzziness_enabled_demo', 'label' => __( 'Fuzzy matching', 'ajax-search-for-woocommerce' ), 'desc' => $fuzzinesText1 . ' ' . $fuzzinesText2, 'class' => 'dgwt-wcas-premium-only', 'type' => 'select', 'options' => array( 'off' => __( '-- Disabled', 'ajax-search-for-woocommerce' ), 'soft' => __( 'Soft', 'ajax-search-for-woocommerce' ), 'normal' => __( 'Normal', 'ajax-search-for-woocommerce' ), 'hard' => __( 'Hard', 'ajax-search-for-woocommerce' ), ), 'default' => 'off', ); // Indexer feature preview $settingsFields['dgwt_wcas_performance'][11] = array( 'name' => 'search_engine_build', 'label' => __( 'Index status', 'ajax-search-for-woocommerce' ), 'type' => 'desc', 'desc' => Helpers::indexerDemoHtml(), 'class' => 'dgwt-wcas-premium-only wcas-opt-tntsearch', ); } foreach ( $settingsFields as $key => $sections ) { foreach ( $sections as $option ) { if ( !empty($option['name']) ) { $this->defaults[$option['name']] = ( isset( $option['default'] ) ? $option['default'] : '' ); } } } if ( !dgoraAsfwFs()->is_premium() ) { foreach ( $settingsFields as $key => $sections ) { foreach ( $sections as $keyl2 => $option ) { if ( self::isOptionPremium( $option ) ) { $settingsFields[$key][$keyl2]['label'] = Helpers::getSettingsProLabel( $option['label'], 'option-label' ); } } } } $settingsFields = apply_filters( 'dgwt/wcas/settings', $settingsFields ); foreach ( $settingsFields as $key => $sections ) { ksort( $settingsFields[$key] ); } return $settingsFields; } /* * Option value * * @param string $option_key * @param string $default default value if option not exist * * @return string */ public function getOption( $option_key, $default = '' ) { $value = ''; if ( is_string( $option_key ) && !empty($option_key) ) { if ( !empty($this->settingsCache) ) { $settings = $this->settingsCache; } else { $settings = get_option( $this->settingSlug ); } if ( !empty($settings) && is_array( $settings ) ) { $this->settingsCache = $settings; if ( array_key_exists( $option_key, $settings ) ) { $value = $settings[$option_key]; } else { // Catch default if ( empty($default) ) { foreach ( $this->defaults as $key => $defaultValue ) { if ( $key === $option_key ) { $value = $defaultValue; } } } } } } if ( $value === '' && !empty($default) ) { $value = $default; } $value = apply_filters( 'dgwt/wcas/settings/load_value', $value, $option_key ); $value = apply_filters( 'dgwt/wcas/settings/load_value/key=' . $option_key, $value ); return $value; } /* * Update option * * @param string $option_key * @param string $value * * @return bool */ public function updateOpt( $optionKey, $value = '' ) { $updated = false; if ( is_string( $optionKey ) && !empty($optionKey) ) { $settings = get_option( $this->settingSlug ); $value = apply_filters( 'dgwt/wcas/settings/update_value', $value, $optionKey ); $value = apply_filters( 'dgwt/wcas/settings/update_value/key=' . $optionKey, $value ); $canUpdate = false; if ( array_key_exists( $optionKey, $this->defaults ) ) { $settings[$optionKey] = $value; $canUpdate = true; } if ( $canUpdate ) { $updated = update_option( $this->settingSlug, $settings ); $this->settingsCache = array(); } } return $updated; } /** * Handles output of the settings */ public static function output() { $settings = DGWT_WCAS()->settings->settingsApi; include_once DGWT_WCAS_DIR . 'partials/admin/settings.php'; } /** * Restore default option value * * @param mixed $value * @param mixed $default * @param array $option * * @return mixed */ public function restoreDefaultValueForFreePlan( $value, $default, $option ) { if ( !dgoraAsfwFs()->is_premium() ) { if ( self::isOptionPremium( $option ) ) { $value = $default; } } return $value; } /** * Check if user can see advanced settings * * @return bool */ public function canSeeAdvSettings() { $canSee = false; if ( is_bool( $this->canSeeAdvSettings ) ) { $canSee = $this->canSeeAdvSettings; } else { $settings = get_option( 'dgwt_wcas_settings_show_advanced' ); if ( !empty($settings) ) { if ( $settings === 'on' ) { $canSee = true; } elseif ( $settings === 'off' ) { $canSee = false; } $this->canSeeAdvSettings = $canSee; } } return $canSee; } /** * Toggle visibility of advanced settings * Ajax endpoint * * @return void */ public function toggleAdvancedSettings() { if ( !current_user_can( 'administrator' ) ) { wp_die( -1, 403 ); } check_ajax_referer( 'dgwt_wcas_advanced_options_switch' ); $show = ( !empty($_GET['adv_settings_value']) && $_GET['adv_settings_value'] === 'show' ? 'on' : 'off' ); update_option( 'dgwt_wcas_settings_show_advanced', $show ); wp_send_json_success(); } /** * Check if a option is premium * * @param array $option * * @return bool */ public static function isOptionPremium( $option ) { $is_premium = false; if ( !empty($option['class']) && strpos( $option['class'], 'dgwt-wcas-premium-only' ) !== false ) { $is_premium = true; } return $is_premium; } /** * Clear settings cache */ public function clearCache() { $this->settingsCache = array(); } }