admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('roi_admin_nonce'), 'strings' => array( 'selectImage' => __('Select Image', 'roi-theme'), 'useImage' => __('Use Image', 'roi-theme'), 'removeImage' => __('Remove Image', 'roi-theme'), 'confirmReset' => __('Are you sure you want to reset all options to default values? This cannot be undone.', 'roi-theme'), 'saved' => __('Settings saved successfully!', 'roi-theme'), 'error' => __('An error occurred while saving settings.', 'roi-theme'), ), )); } add_action('admin_enqueue_scripts', 'roi_enqueue_admin_scripts'); /** * Add settings link to theme actions */ function roi_add_settings_link($links) { $settings_link = '' . __('Settings', 'roi-theme') . ''; array_unshift($links, $settings_link); return $links; } add_filter('theme_action_links_' . get_template(), 'roi_add_settings_link'); /** * AJAX handler for resetting options */ function roi_reset_options_ajax() { check_ajax_referer('roi_admin_nonce', 'nonce'); if (!current_user_can('manage_options')) { wp_send_json_error(array('message' => __('Insufficient permissions.', 'roi-theme'))); } // Delete options to reset to defaults delete_option('roi_theme_options'); wp_send_json_success(array('message' => __('Options reset to defaults successfully.', 'roi-theme'))); } add_action('wp_ajax_roi_reset_options', 'roi_reset_options_ajax'); /** * AJAX handler for exporting options */ function roi_export_options_ajax() { check_ajax_referer('roi_admin_nonce', 'nonce'); if (!current_user_can('manage_options')) { wp_send_json_error(array('message' => __('Insufficient permissions.', 'roi-theme'))); } $options = get_option('roi_theme_options', array()); wp_send_json_success(array( 'data' => json_encode($options, JSON_PRETTY_PRINT), 'filename' => 'roi-theme-options-' . date('Y-m-d') . '.json' )); } add_action('wp_ajax_roi_export_options', 'roi_export_options_ajax'); /** * AJAX handler for importing options */ function roi_import_options_ajax() { check_ajax_referer('roi_admin_nonce', 'nonce'); if (!current_user_can('manage_options')) { wp_send_json_error(array('message' => __('Insufficient permissions.', 'roi-theme'))); } if (!isset($_POST['import_data'])) { wp_send_json_error(array('message' => __('No import data provided.', 'roi-theme'))); } $import_data = json_decode(stripslashes($_POST['import_data']), true); if (json_last_error() !== JSON_ERROR_NONE) { wp_send_json_error(array('message' => __('Invalid JSON data.', 'roi-theme'))); } // Sanitize imported data $sanitized_data = roi_sanitize_options($import_data); // Update options update_option('roi_theme_options', $sanitized_data); wp_send_json_success(array('message' => __('Options imported successfully.', 'roi-theme'))); } add_action('wp_ajax_roi_import_options', 'roi_import_options_ajax'); /** * Add admin notices */ function roi_admin_notices() { $screen = get_current_screen(); if ($screen->id !== 'appearance_page_roi-theme-options') { return; } // Check if settings were updated if (isset($_GET['settings-updated']) && $_GET['settings-updated'] === 'true') { ?>