:root { --lcp--header--height: {$header_height}px; }"; } } add_action('wp_enqueue_scripts', 'lcp_header_height_style',1); function lcp_enqueue() { // Enqueue the theme's main stylesheet (style.css) wp_enqueue_style('lcp-style', get_stylesheet_uri()); wp_enqueue_script('lcp-script', get_template_directory_uri() . '/assets/js/lcp.js'); wp_enqueue_script('lcp-ui-script', get_template_directory_uri() . '/assets/js/lcp-ui.js'); } add_action('wp_enqueue_scripts', 'lcp_enqueue'); /* KEY POINTS */ function add_key_points_meta_box() { add_meta_box( 'key_points_meta_box', // ID of the meta box 'Key Points', // Title of the meta box 'render_key_points_meta_box', // Callback function to display the meta box 'post', // Post type (you can change it to other post types) 'normal', // Context (normal, side, advanced) 'default' // Priority ); } // Add meta box if setting is turned on $options = get_option('lcp_theme_settings', array()); $enable_key_points_meta = isset($options['enable_key_points_meta']) ? $options['enable_key_points_meta'] : 0; // Check if 'enable_key_points_meta' is enabled (1), then add the meta box if ($enable_key_points_meta) { // Hook into add_meta_boxes to register the custom meta box add_action('add_meta_boxes', 'add_key_points_meta_box'); } // Sanitize the SVGs data function lcp_custom_svgs_sanitize($input) { // Ensure the input is an array if (is_array($input)) { foreach ($input as $key => $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); } /* BACKEND ICON ADDER */ // Register the dashboard page in the admin menu function lcp_register_dashboard_page() { add_menu_page( 'Icon Management', // Page Title 'Icon Management', // Menu Title 'manage_options', // Capability 'icon-management', // Menu Slug 'lcp_dashboard_page', // Callback function 'dashicons-images-alt2', // Icon for the menu item 60 // Position ); } add_action('admin_menu', 'lcp_register_dashboard_page'); // Callback function to display the dashboard page content function lcp_dashboard_page() { ?>

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

'; } } // Enqueue the dashboard styles only on the icon-management page function lcp_enqueue_dashboard_styles($hook) { // Enqueue CSS for the dashboard wp_enqueue_style( 'lcp-dashboard-css', get_template_directory_uri() . '/assets/css/dashboard.css' ); } add_action('admin_enqueue_scripts', 'lcp_enqueue_dashboard_styles'); // Handle the AJAX request for installing icon sets function lcp_install_icon_set($defaults = false) { $json_path = get_template_directory() . '/assets/json/icons/icon-definitions.json'; if ($defaults) { // Import only the default icons if (file_exists($json_path)) { $json_data = file_get_contents($json_path); $icon_sets = json_decode($json_data, true); // Loop through all icon sets and filter for default icons foreach ($icon_sets as $icon_set) { if (isset($icon_set['default']) && $icon_set['default'] === true) { $file_name = $icon_set['fileName']; // Assuming the JSON structure has 'fileName' key $icon_file_path = get_template_directory() . '/assets/json/icons/' . $file_name; if (file_exists($icon_file_path)) { $icon_data = file_get_contents($icon_file_path); $icon_json = json_decode($icon_data, true); // Check if svgs exist and process them if (isset($icon_json[0]['svgs']) && is_array($icon_json[0]['svgs'])) { foreach ($icon_json[0]['svgs'] as $svg) { global $wpdb; $table_name = $wpdb->prefix . 'lcp_icons'; // Insert the SVG data into the database $wpdb->insert( $table_name, array( 'icon_name' => $svg['name'], 'icon_set_id' => $icon_set['id'], 'icon_family' => $icon_set['setFamily'], 'icon_version' => $icon_set['version'], 'paths' => ($svg['paths']), 'viewbox' => sanitize_text_field($svg['viewBox']), 'icon_id' => sanitize_text_field($svg['id']), ) ); } } else { wp_send_json_error(array('message' => 'SVGs data not found in the JSON file.')); } } else { wp_send_json_error(array('message' => 'SVG file for default set not found.')); } } } } else { wp_send_json_error(array('message' => 'Icon definitions file not found.')); } } elseif (isset($_POST['icon_set_id'])) { // Default behavior - check for icon_set_id in $_POST if (!isset($_POST['icon_set_id'])) { wp_send_json_error(array('message' => 'Invalid icon set ID.')); } $icon_set_id = intval($_POST['icon_set_id']); // Create the database table if it doesn't exist lcp_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) { $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); // 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'])) { 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'], 'icon_set_id' => $selected_icon_set['id'], 'icon_family' => $selected_icon_set['setFamily'], 'icon_version' => $selected_icon_set['version'], 'paths' => ($svg['paths']), 'viewbox' => sanitize_text_field($svg['viewBox']), 'icon_id' => sanitize_text_field($svg['id']), ) ); } 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', 'lcp_install_icon_set'); // Function to create the icons table in the database if it doesn't exist function lcp_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); } // Handle the AJAX request for uninstalling icon sets function lcp_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', 'lcp_uninstall_icon_set'); /* Import Demo Posts */ function lcp_import_demo_posts() { $json_data = file_get_contents(get_template_directory() . '/assets/json/demo-posts.json'); // Check if the JSON data is successfully fetched and decoded if (empty($json_data)) { return; } $posts = json_decode($json_data, true)['posts']; if (empty($posts)) { return; } // Arrays to store post IDs and media (thumbnail) IDs $post_ids = []; $media_ids = []; foreach ($posts as $post) { // Prepare post data $post_data = array( 'post_title' => wp_strip_all_tags($post['title']), 'post_content' => $post['content'], 'post_excerpt' => isset($post['excerpt']) ? $post['excerpt'] : '', 'post_status' => isset($post['status']) ? $post['status'] : 'draft', // Default to 'draft' if no status 'post_date' => isset($post['date']) ? $post['date'] : current_time('mysql'), 'post_type' => 'post', 'post_author' => 1, // Change if you have specific user IDs ); // Insert the post into the database $post_id = wp_insert_post($post_data); // If there was an issue inserting the post, skip this one if (is_wp_error($post_id)) { continue; } // Store the post ID in the array $post_ids[] = $post_id; // Assign categories (if they exist) if (!empty($post['category'])) { $category = term_exists($post['category'], 'category'); if ($category) { wp_set_post_terms($post_id, array($category['term_id']), 'category'); } else { // If category doesn't exist, create it $category_id = wp_create_term($post['category'], 'category'); wp_set_post_terms($post_id, array($category_id['term_id']), 'category'); } } // Assign tags (if they exist) if (!empty($post['tags'])) { wp_set_post_terms($post_id, $post['tags'], 'post_tag'); } // Handle thumbnail (featured image) if (!empty($post['thumbnail'])) { $thumbnail_url = get_template_directory_uri() . '/assets/img/demo-post-thumbnails/' . $post['thumbnail']; // Download the image and add it to the media library $thumbnail_id = media_handle_sideload( array( 'name' => basename($thumbnail_url), 'tmp_name' => download_url($thumbnail_url) ), $post_id ); // If the image was uploaded successfully, set it as the post's featured image if (!is_wp_error($thumbnail_id)) { set_post_thumbnail($post_id, $thumbnail_id); // Store the media ID in the array $media_ids[] = $thumbnail_id; } } // You can add additional meta fields if necessary // Example: // update_post_meta($post_id, 'some_meta_key', 'some_value'); } // After all posts are imported, update the 'lcp_demo_posts' option $demo_posts_data = array( 'post_ids' => $post_ids, 'media_ids' => $media_ids, ); update_option('lcp_demo_posts', $demo_posts_data); // Optionally, you can log the post and media IDs // var_dump($post_ids, $media_ids); // Uncomment this line if you need to inspect the result } /* Delete the Demo Posts */ // Get the lcp_demo_posts option and delete all the posts from there function lcp_delete_demo_posts() { // Get the lcp_demo_posts option $demo_posts_data = get_option('lcp_demo_posts'); // Check if the option exists and contains data if (!empty($demo_posts_data) && isset($demo_posts_data['post_ids']) && isset($demo_posts_data['media_ids'])) { // Loop through and delete posts foreach ($demo_posts_data['post_ids'] as $post_id) { // Delete post, force delete if necessary (set true for delete permanently) wp_delete_post($post_id, true); // true will permanently delete } // Loop through and delete media (attachments) foreach ($demo_posts_data['media_ids'] as $media_id) { // Delete attachment (media file) wp_delete_attachment($media_id, true); // true will permanently delete } // After deletion, remove the option from wp_options table delete_option('lcp_demo_posts'); // Optionally, you can log the deletion for confirmation // error_log('Demo posts and media have been deleted.'); } else { // If the option doesn't exist, or it's empty error_log('No demo posts data found or already deleted.'); } } /* Localize */ add_action('wp_ajax_lcp_import_demo_posts', 'lcp_import_demo_posts_ajax_handler'); // Define the function to handle the AJAX request function lcp_import_demo_posts_ajax_handler() { // Check for permissions (optional: can be used to ensure only admins can trigger this) if (!current_user_can('manage_options')) { wp_send_json_error('You do not have sufficient permissions to perform this action.'); } // Call the existing function that imports the demo posts lcp_import_demo_posts(); // Send a success response back to the browser wp_send_json_success('Demo posts imported successfully.'); } add_action('wp_ajax_lcp_delete_demo_posts', 'lcp_delete_demo_posts_ajax_handler'); // Define the function to handle the delete demo posts AJAX request function lcp_delete_demo_posts_ajax_handler() { // Verify nonce for security if (!isset($_POST['lcp_import_nonce']) || !wp_verify_nonce($_POST['lcp_import_nonce'], 'lcp_import_demo_posts_nonce')) { wp_send_json_error('Invalid nonce'); } // Check if the current user has permissions to manage options if (!current_user_can('manage_options')) { wp_send_json_error('You do not have sufficient permissions to perform this action.'); } // Call the function that deletes the demo posts lcp_delete_demo_posts(); // Send a success response back to the browser wp_send_json_success('Demo posts deleted successfully.'); }