titles = array( 'API Key' => array( 'title' => esc_html__( 'OpenAI API Key', 'ai-descriptions-for-woocommerce' ), 'tip' => esc_html__( 'Get the API key from Open AI', 'ai-descriptions-for-woocommerce' ), ), ); $this->options = get_option( 'ai-descriptions-for-woocommerce' ); $this->options = array_merge( self::option_defaults( 'ai-descriptions-for-woocommerce' ), $this->options ); $this->settings_title = '
' . __( 'Settings', 'ai-descriptions-for-woocommerce' ) . '
'; parent::__construct(); } public static function option_defaults( $option ) { switch ( $option ) { case 'ai-descriptions-for-woocommerce': $res = array( 'openai_api_key' => '', ); return $res; default: return false; } } public function plugin_action_links() { add_filter( 'plugin_action_links_' . AIDFW_PLUGIN_BASENAME, array( $this, 'add_plugin_action_links', ) ); } public function add_plugin_action_links( $links ) { $links = array_merge( array( '' . esc_html__( 'Settings' ) . '', ), $links ); return $links; } public function register_settings() { /* Register our setting. */ register_setting( $this->option_group, /* Option Group */ 'ai-descriptions-for-woocommerce', /* Option Name */ array( $this, 'sanitize_settings' ) /* Sanitize Callback */ ); Utilities::get_instance()->register_settings_page_tab( __( 'Settings', 'ai-descriptions-for-woocommerce' ), 'settings', admin_url( 'admin.php?page=ai-descriptions-for-woocommerce-settings' ), 0 ); /* Add settings menu page */ $this->settings_page = add_submenu_page( 'ai-descriptions-for-woocommerce-settings', esc_html__( 'Settings', 'ai-descriptions-for-woocommerce' ), /* Page Title */ esc_html__( 'Settings', 'ai-descriptions-for-woocommerce' ), /* Menu Title */ 'manage_options', /* Capability */ 'ai-descriptions-for-woocommerce-settings', /* Page Slug */ array( $this, 'settings_page' ) /* Settings Page Function Callback */ ); register_setting( $this->option_group, /* Option Group */ "{$this->option_group}-reset", /* Option Name */ array( $this, 'reset_sanitize' ) /* Sanitize Callback */ ); } public function reset_sanitize( $settings ) { // Detect multiple sanitizing passes. // Accomodates bug: https://core.trac.wordpress.org/ticket/21989 if ( ! empty( $settings ) ) { add_settings_error( $this->option_group, '', esc_html__( 'Settings reset to defaults.', 'ai-descriptions-for-woocommerce' ), 'updated' ); /* Delete Option */ $this->delete_options(); } return $settings; } public function delete_options() { update_option( 'ai-descriptions-for-woocommerce', self::option_defaults( 'ai-descriptions-for-woocommerce' ) ); } public function add_meta_boxes() { $this->add_meta_box( 'settings', /* Meta Box ID */ esc_html__( 'Settings', 'ai-descriptions-for-woocommerce' ), /* Title */ array( $this, 'meta_box_settings' ), /* Function Callback */ $this->settings_page_id, /* Screen: Our Settings Page */ 'normal', /* Context */ 'default', /* Priority */ null, false ); } private function add_meta_box( $id, $title, $callback, $screen = null, $context = 'advanced', $priority = 'default', $callback_args = null, $closed = true ) { add_meta_box( $id, $title, $callback, $screen, $context, $priority, $callback_args ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce verification not required. if ( ! isset( $_GET['settings-updated'] ) ) { if ( $closed ) { add_filter( "postbox_classes_{$screen}_{$id}", function ( $classes ) { array_push( $classes, 'closed' ); return $classes; } ); } } } public function sanitize_settings( $settings ) { if ( isset( $_REQUEST['ai-descriptions-for-woocommerce-reset'] ) ) { if ( ! isset( $_REQUEST['_aidwc_submit_meta_box_nonce'] ) || ! wp_verify_nonce( sanitize_key( wp_unslash( $_REQUEST['_aidwc_submit_meta_box_nonce'] ) ), 'fwas_submit_meta_box' ) ) { wp_die( esc_html__( 'Nonce verification failed.', 'ai-descriptions-for-woocommerce' ) ); } return $settings; } if ( isset( $settings ['openai_api_key'] ) && ! empty( $settings ['openai_api_key'] ) ) { $settings['openai_api_key'] = sanitize_text_field( $settings['openai_api_key'] ); } return $settings; } private function get_option( $option_name ) { $option = $this->options[ $option_name ]; return $option; } public function meta_box_settings() { ?> display_th( 'API Key' ); ?> display_tip( 'API Key' ); ?>
titles[ $title ]['title'] ); ?> titles[ $title ]['tip'] ) ) ? '

' . esc_html( $this->titles[ $title ]['tip'] ) . '

' : ''; ?>