plugin = $plugin; $this->provider_manager = $provider_manager; add_action( 'admin_menu', [ $this, 'register_settings_pages' ] ); add_action( 'admin_init', [ $this, 'register_settings' ] ); add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_settings_assets' ] ); add_action( 'admin_head', [ $this, 'hide_menu_links' ] ); } public function register_settings_pages() { add_options_page( __( 'Siti AI Productteksten', GROQ_AI_PRODUCT_TEXT_DOMAIN ), __( 'Siti AI', GROQ_AI_PRODUCT_TEXT_DOMAIN ), 'manage_options', 'groq-ai-product-text', [ $this, 'render_settings_page' ] ); add_submenu_page( 'options-general.php', __( 'Siti AI Modules', GROQ_AI_PRODUCT_TEXT_DOMAIN ), __( 'Siti AI Modules', GROQ_AI_PRODUCT_TEXT_DOMAIN ), 'manage_options', 'groq-ai-product-text-modules', [ $this, 'render_modules_page' ] ); add_submenu_page( 'options-general.php', __( 'Siti AI AI-logboek', GROQ_AI_PRODUCT_TEXT_DOMAIN ), __( 'Siti AI AI-logboek', GROQ_AI_PRODUCT_TEXT_DOMAIN ), 'manage_options', 'groq-ai-product-text-logs', [ $this, 'render_logs_page' ] ); add_submenu_page( 'options-general.php', __( 'Siti AI Prompt instellingen', GROQ_AI_PRODUCT_TEXT_DOMAIN ), __( 'Siti AI Prompt instellingen', GROQ_AI_PRODUCT_TEXT_DOMAIN ), 'manage_options', 'groq-ai-product-text-prompts', [ $this, 'render_prompt_settings_page' ] ); } public function hide_menu_links() { if ( ! current_user_can( 'manage_options' ) ) { return; } ?> plugin->get_option_key(), [ $this->plugin, 'sanitize_settings' ] ); add_settings_section( 'groq_ai_product_text_general', __( 'Algemene instellingen', GROQ_AI_PRODUCT_TEXT_DOMAIN ), '__return_false', 'groq-ai-product-text' ); add_settings_field( 'groq_ai_provider', __( 'AI-aanbieder', GROQ_AI_PRODUCT_TEXT_DOMAIN ), [ $this, 'render_provider_field' ], 'groq-ai-product-text', 'groq_ai_product_text_general' ); add_settings_field( 'groq_ai_model', __( 'Model', GROQ_AI_PRODUCT_TEXT_DOMAIN ), [ $this, 'render_model_field' ], 'groq-ai-product-text', 'groq_ai_product_text_general' ); foreach ( $this->provider_manager->get_providers() as $provider ) { add_settings_field( 'groq_ai_api_key_' . $provider->get_key(), sprintf( __( '%s API-sleutel', GROQ_AI_PRODUCT_TEXT_DOMAIN ), $provider->get_label() ), [ $this, 'render_provider_api_key_field' ], 'groq-ai-product-text', 'groq_ai_product_text_general', [ 'provider' => $provider, ] ); } add_settings_section( 'groq_ai_product_text_prompts', __( 'Prompt instellingen', GROQ_AI_PRODUCT_TEXT_DOMAIN ), '__return_false', 'groq-ai-product-text-prompts' ); add_settings_field( 'groq_ai_store_context', __( 'Winkelcontext', GROQ_AI_PRODUCT_TEXT_DOMAIN ), [ $this, 'render_store_context_field' ], 'groq-ai-product-text-prompts', 'groq_ai_product_text_prompts' ); add_settings_field( 'groq_ai_default_prompt', __( 'Standaard prompt', GROQ_AI_PRODUCT_TEXT_DOMAIN ), [ $this, 'render_default_prompt_field' ], 'groq-ai-product-text-prompts', 'groq_ai_product_text_prompts' ); add_settings_field( 'groq_ai_context_fields', __( 'Standaard productcontext', GROQ_AI_PRODUCT_TEXT_DOMAIN ), [ $this, 'render_context_fields_field' ], 'groq-ai-product-text-prompts', 'groq_ai_product_text_prompts' ); add_settings_field( 'groq_ai_response_format_compat', __( 'Response-format compatibiliteit', GROQ_AI_PRODUCT_TEXT_DOMAIN ), [ $this, 'render_response_format_compat_field' ], 'groq-ai-product-text-prompts', 'groq_ai_product_text_prompts' ); add_settings_field( 'groq_ai_image_context_mode', __( 'Afbeeldingen toevoegen', GROQ_AI_PRODUCT_TEXT_DOMAIN ), [ $this, 'render_image_context_mode_field' ], 'groq-ai-product-text-prompts', 'groq_ai_product_text_prompts' ); add_settings_field( 'groq_ai_image_context_limit', __( 'Maximaal aantal afbeeldingen', GROQ_AI_PRODUCT_TEXT_DOMAIN ), [ $this, 'render_image_context_limit_field' ], 'groq-ai-product-text-prompts', 'groq_ai_product_text_prompts' ); add_settings_section( 'groq_ai_product_text_modules_rankmath', __( 'Rank Math SEO', GROQ_AI_PRODUCT_TEXT_DOMAIN ), '__return_false', 'groq-ai-product-text-modules' ); add_settings_field( 'groq_ai_module_rankmath', __( 'Rank Math SEO', GROQ_AI_PRODUCT_TEXT_DOMAIN ), [ $this, 'render_rankmath_module_field' ], 'groq-ai-product-text-modules', 'groq_ai_product_text_modules_rankmath' ); } public function render_image_context_mode_field() { $settings = $this->plugin->get_settings(); $mode = isset( $settings['image_context_mode'] ) ? $settings['image_context_mode'] : 'url'; $options = [ 'none' => __( 'Nee, geen afbeeldingen', GROQ_AI_PRODUCT_TEXT_DOMAIN ), 'url' => __( 'Ja, voeg afbeeldings-URL’s toe aan de prompt', GROQ_AI_PRODUCT_TEXT_DOMAIN ), 'base64' => __( 'Ja, verstuur afbeeldingen als Base64 (indien ondersteund)', GROQ_AI_PRODUCT_TEXT_DOMAIN ), ]; ?>

plugin->get_settings(); $limit = $this->plugin->get_image_context_limit( $settings ); ?>

plugin->get_settings(); ?>

plugin->get_settings(); ?>

plugin ); $logs_table->prepare_items(); ?>

search_box( __( 'Zoek logs', GROQ_AI_PRODUCT_TEXT_DOMAIN ), 'groq-ai-logs' ); ?> display(); ?>
plugin->get_settings(); $providers = $this->provider_manager->get_providers(); ?>

plugin->get_settings(); $current_model = $settings['model']; $current_provider = $settings['provider']; ?>

plugin->get_settings(); /** @var Groq_AI_Provider_Interface $provider */ $provider = $args['provider']; $field = $provider->get_option_key(); $provider_key = $provider->get_key(); ?>

get_label() ) ); ?>

plugin->get_settings(); ?>

plugin->get_settings(); ?>

plugin->get_settings(); $values = isset( $settings['context_fields'] ) ? $settings['context_fields'] : $this->plugin->get_default_context_fields(); $definitions = $this->plugin->get_context_field_definitions(); ?>
$definition ) : $checked = ! empty( $values[ $key ] ); ?>

plugin->get_settings(); $is_enabled = ! empty( $settings['response_format_compat'] ); ?>

plugin->get_settings(); $defaults = $this->plugin->get_default_modules_settings(); $modules = isset( $settings['modules'] ) ? $settings['modules'] : $defaults; $config = isset( $modules['rankmath'] ) ? $modules['rankmath'] : ( $defaults['rankmath'] ?? [] ); $rankmath_active = $this->plugin->is_rankmath_active(); $enabled = $rankmath_active && ! empty( $config['enabled'] ); $keyword_limit = isset( $config['focus_keyword_limit'] ) ? absint( $config['focus_keyword_limit'] ) : ( $defaults['rankmath']['focus_keyword_limit'] ?? 3 ); $keyword_limit = $keyword_limit > 0 ? $keyword_limit : 3; $title_pixels = isset( $config['meta_title_pixel_limit'] ) ? absint( $config['meta_title_pixel_limit'] ) : ( $defaults['rankmath']['meta_title_pixel_limit'] ?? 580 ); $title_pixels = $title_pixels > 0 ? $title_pixels : 580; $pixel_limit = isset( $config['meta_description_pixel_limit'] ) ? absint( $config['meta_description_pixel_limit'] ) : ( $defaults['rankmath']['meta_description_pixel_limit'] ?? 920 ); $pixel_limit = $pixel_limit > 0 ? $pixel_limit : 920; $rankmath_active = $this->plugin->is_rankmath_active(); ?>

/>

/>

/>

plugin->get_settings(); $data = [ 'optionKey' => $this->plugin->get_option_key(), 'providers' => [], 'currentProvider' => $current_settings['provider'], 'currentModel' => $current_settings['model'], 'providerRows' => [], 'ajaxUrl' => admin_url( 'admin-ajax.php' ), 'refreshNonce' => wp_create_nonce( 'groq_ai_refresh_models' ), 'excludedModels' => Groq_AI_Model_Exclusions::get_all(), 'placeholders' => [ 'selectModel' => __( 'Selecteer een model via "Live modellen ophalen"', GROQ_AI_PRODUCT_TEXT_DOMAIN ), ], ]; foreach ( $this->provider_manager->get_providers() as $provider ) { $provider_key = $provider->get_key(); $cached_models = $this->plugin->get_cached_models_for_provider( $provider_key ); $cached_models = Groq_AI_Model_Exclusions::filter_models( $provider_key, $cached_models ); $data['providers'][ $provider->get_key() ] = [ 'default_label' => sprintf( __( 'Gebruik standaardmodel (%s)', GROQ_AI_PRODUCT_TEXT_DOMAIN ), $provider->get_default_model() ), 'models' => $cached_models, 'supports_live' => $provider->supports_live_models(), ]; $data['providerRows'][ $provider->get_key() ] = 'groq_ai_api_key_' . $provider->get_key(); } wp_localize_script( 'groq-ai-settings', 'GroqAISettingsData', $data ); } }