$svg) { // Sanitize the name and path for each SVG if (isset($svg['name'])) { $input[$key]['name'] = sanitize_text_field($svg['name']); } if (isset($svg['path'])) { $input[$key]['path'] = sanitize_textarea_field($svg['path']); } } } return $input; } // Existing function to render the theme settings page // Callback function to render the meta box function render_key_points_meta_box($post) { // Retrieve the stored key points (serialized data) $key_points_serialized = get_post_meta($post->ID, '_key_points', true); $key_points = !empty($key_points_serialized) ? unserialize($key_points_serialized) : []; ?>
prefix . 'lcp_icons'; // SQL query to drop the table $sql = "DROP TABLE IF EXISTS $table_name;"; // Execute the query $wpdb->query($sql); } // Hook the function to the theme deactivation process // Register the function to run when the theme is switched (deactivated) add_action('switch_theme', 'drop_lcp_icons_table'); /* BACKEND ICON ADDER */ // Register the dashboard page in the admin menu function mytheme_register_dashboard_page() { add_menu_page( 'Icon Management', // Page Title 'Icon Management', // Menu Title 'manage_options', // Capability 'icon-management', // Menu Slug 'mytheme_dashboard_page', // Callback function 'dashicons-images-alt2', // Icon for the menu item 60 // Position ); } add_action('admin_menu', 'mytheme_register_dashboard_page'); // Callback function to display the dashboard page content function mytheme_dashboard_page() { ?>

' . esc_html__('No icon definitions found.', 'lcp') . '

'; } } // Enqueue the dashboard styles only on the icon-management page function mytheme_enqueue_dashboard_styles($hook) { // Enqueue CSS for the dashboard wp_enqueue_style( 'mytheme-dashboard-css', get_template_directory_uri() . '/assets/css/dashboard.css' ); } add_action('admin_enqueue_scripts', 'mytheme_enqueue_dashboard_styles'); // Handle the AJAX request for installing icon sets function mytheme_install_icon_set() { if (!isset($_POST['icon_set_id'])) { wp_send_json_error(array('message' => 'Invalid icon set ID.')); } $icon_set_id = intval($_POST['icon_set_id']); $json_path = get_template_directory() . '/assets/json/icons/icon-definitions.json'; // Create the database table if it doesn't exist mytheme_create_icons_table(); // Read the icon definitions JSON file if (file_exists($json_path)) { $json_data = file_get_contents($json_path); $icon_sets = json_decode($json_data, true); // Search for the selected icon set by ID $selected_icon_set = null; foreach ($icon_sets as $icon_set) { if ($icon_set['id'] === $icon_set_id) { $selected_icon_set = $icon_set; break; } } // If the icon set is found if ($selected_icon_set) { // Dynamically build the icon file path using the fileName from icon-definitions.json $file_name = $selected_icon_set['fileName']; // Assuming the JSON structure has 'fileName' key $icon_file_path = get_template_directory() . '/assets/json/icons/' . $file_name; // Now read the corresponding SVG file for the icon set if (file_exists($icon_file_path)) { $icon_data = file_get_contents($icon_file_path); $icon_json = json_decode($icon_data, true); // Debugging: Check the structure of the decoded JSON if (is_array($icon_json)) { error_log(print_r($icon_json, true)); // Logs to PHP error log for inspection } // Loop through svgs if it exists and is an array if (isset($icon_json[0]['svgs']) && is_array($icon_json[0]['svgs'])) { // Insert rows with actual data from the SVG file foreach ($icon_json[0]['svgs'] as $svg) { global $wpdb; $table_name = $wpdb->prefix . 'lcp_icons'; // Insert each SVG data into the database $wpdb->insert( $table_name, array( 'icon_name' => $svg['name'], // Using the name from the SVG JSON 'icon_set_id' => $selected_icon_set['id'], 'icon_family' => $selected_icon_set['setFamily'], // Get family dynamically from the selected icon set 'icon_version' => $selected_icon_set['version'], // Get version dynamically from the selected icon set 'paths' => ($svg['paths']), // SVG paths from the JSON 'viewbox' => sanitize_text_field($svg['viewBox']), // Viewbox for the SVG 'icon_id' => sanitize_text_field($svg['id']) // Using the actual icon ID from the JSON ) ); } wp_send_json_success(array('message' => 'Icon set installed and rows added with actual data.')); } else { wp_send_json_error(array('message' => 'SVGs data not found in the JSON file.')); } } else { wp_send_json_error(array('message' => 'SVG file not found.')); } } else { wp_send_json_error(array('message' => 'Icon set not found.')); } } else { wp_send_json_error(array('message' => 'Icon definitions not found.')); } } add_action('wp_ajax_install_icon_set', 'mytheme_install_icon_set'); // Function to create the icons table in the database if it doesn't exist // Function to create the icons table in the database if it doesn't exist function mytheme_create_icons_table() { global $wpdb; $table_name = $wpdb->prefix . 'lcp_icons'; $charset_collate = $wpdb->get_charset_collate(); // SQL to create the table if it doesn't exist $sql = "CREATE TABLE IF NOT EXISTS $table_name ( id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, -- Auto-increment for the ID icon_name VARCHAR(255), icon_set_id VARCHAR(255), icon_family VARCHAR(255), icon_version VARCHAR(50), paths TEXT, viewbox VARCHAR(50), icon_id VARCHAR(255) UNIQUE, -- Unique identifier for each SVG (based on SVG 'id') PRIMARY KEY (id) ) $charset_collate;"; // Include the necessary WordPress file to run dbDelta require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } function mytheme_enqueue_dashboard_scripts($hook) { // Only load the script on the icon-management page // Enqueue JavaScript for AJAX wp_enqueue_script( 'icon-import-script', get_template_directory_uri() . '/assets/js/icon-import.js', array(), // No dependencies for vanilla JS null, true ); // Pass the AJAX URL to the script wp_localize_script('icon-import-script', 'mytheme_ajax', array( 'ajax_url' => admin_url('admin-ajax.php') )); } add_action('admin_enqueue_scripts', 'mytheme_enqueue_dashboard_scripts'); // Handle the AJAX request for uninstalling icon sets function mytheme_uninstall_icon_set() { // Ensure icon set ID is passed in the request if (!isset($_POST['icon_set_id'])) { wp_send_json_error(array('message' => 'Invalid icon set ID.')); } // Get the icon set ID from the request $icon_set_id = intval($_POST['icon_set_id']); // Ensure it's an integer global $wpdb; // Define the table name $table_name = $wpdb->prefix . 'lcp_icons'; // Delete all rows where the icon_set_id matches the passed ID $deleted_rows = $wpdb->delete( $table_name, array('icon_set_id' => $icon_set_id), // Condition to match rows by icon_set_id array('%d') // Sanitize the value as an integer ); // Check if rows were deleted successfully if ($deleted_rows) { wp_send_json_success(array('message' => 'Icon set uninstalled and icons removed from the database.')); } else { wp_send_json_error(array('message' => 'No icons found for the specified icon set ID.')); } } add_action('wp_ajax_uninstall_icon_set', 'mytheme_uninstall_icon_set'); /* Add Styles */ function lcp_header_height_style() { // Fetch the lcp_header_height value from wp_options. $header_height = get_option('lcp_header_height', 0); // Default to 0 if not found // Ensure we have a valid value if ($header_height) { // Output the inline style tag with the CSS variable for header height echo ""; } } add_action('wp_head', 'lcp_header_height_style');