page_hook = add_menu_page( __('Headers & Footers Code', 'pc-headers-and-footers-and-ad-pixels-5ake'), __('Headers & Footers', 'pc-headers-and-footers-and-ad-pixels-5ake'), 'manage_options', 'pc-hfap-snippets', array($this, 'render_snippets_page'), 'dashicons-code-standards', 30 ); add_submenu_page( 'pc-hfap-snippets', __('All Snippets', 'pc-headers-and-footers-and-ad-pixels-5ake'), __('All Snippets', 'pc-headers-and-footers-and-ad-pixels-5ake'), 'manage_options', 'pc-hfap-snippets', array($this, 'render_snippets_page') ); add_submenu_page( 'pc-hfap-snippets', __('Add New Snippet', 'pc-headers-and-footers-and-ad-pixels-5ake'), __('Add New', 'pc-headers-and-footers-and-ad-pixels-5ake'), 'manage_options', 'pc-hfap-add-snippet', array($this, 'render_add_snippet_page') ); add_submenu_page( 'pc-hfap-snippets', __('Settings', 'pc-headers-and-footers-and-ad-pixels-5ake'), __('Settings', 'pc-headers-and-footers-and-ad-pixels-5ake'), 'manage_options', 'pc-hfap-settings', array($this, 'render_settings_page') ); } public function handle_save_snippet() { // Check nonce if (!isset($_POST['pc_hfap_nonce']) || !wp_verify_nonce($_POST['pc_hfap_nonce'], 'pc_hfap_save_snippet')) { wp_redirect(admin_url('admin.php?page=pc-hfap-add-snippet&error=nonce')); exit; } // Check permissions if (!current_user_can('manage_options')) { wp_redirect(admin_url('admin.php?page=pc-hfap-add-snippet&error=permission')); exit; } // Validate fields if (empty($_POST['pc_hfap_title']) || empty($_POST['pc_hfap_location']) || empty($_POST['pc_hfap_code'])) { wp_redirect(admin_url('admin.php?page=pc-hfap-add-snippet&error=validation')); exit; } // Prepare data $data = array( 'title' => sanitize_text_field($_POST['pc_hfap_title']), 'location' => in_array($_POST['pc_hfap_location'], array('header', 'footer', 'body')) ? $_POST['pc_hfap_location'] : 'header', 'code' => wp_unslash($_POST['pc_hfap_code']) ); // Check if editing $is_edit = !empty($_POST['pc_hfap_id']); if ($is_edit) { $snippet = PC_HFAP_Snippet::get_by_id(intval($_POST['pc_hfap_id'])); if ($snippet) { $snippet->set_title($data['title']); $snippet->set_location($data['location']); $snippet->set_code($data['code']); $result = $snippet->save(); if ($result !== false) { wp_redirect(admin_url('admin.php?page=pc-hfap-snippets&message=updated')); exit; } } wp_redirect(admin_url('admin.php?page=pc-hfap-add-snippet&id=' . intval($_POST['pc_hfap_id']) . '&error=save')); exit; } else { $snippet = new PC_HFAP_Snippet($data); $result = $snippet->save(); if ($result) { wp_redirect(admin_url('admin.php?page=pc-hfap-snippets&message=created')); exit; } wp_redirect(admin_url('admin.php?page=pc-hfap-add-snippet&error=save')); exit; } } public function enqueue_admin_assets($hook) { if ($hook !== $this->page_hook && strpos($hook, 'pc-hfap-') === false) { return; } wp_enqueue_style( 'pc-hfap-admin-style', PC_HFAP_PLUGIN_URL . 'admin/css/admin-style.css', array(), PC_HFAP_VERSION ); wp_enqueue_script( 'pc-hfap-admin-script', PC_HFAP_PLUGIN_URL . 'admin/js/admin-script.js', array('jquery'), PC_HFAP_VERSION, true ); wp_localize_script('pc-hfap-admin-script', 'pc_hfap_admin', array( 'ajax_url' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('pc_hfap_admin_nonce'), 'confirm_delete' => __('Are you sure you want to delete this snippet?', 'pc-headers-and-footers-and-ad-pixels-5ake') )); } public function render_snippets_page() { if (!current_user_can('manage_options')) { wp_die(__('You do not have sufficient permissions to access this page.', 'pc-headers-and-footers-and-ad-pixels-5ake')); } // Handle delete BEFORE any HTML output if (isset($_GET['action']) && $_GET['action'] === 'delete' && isset($_GET['id'])) { check_admin_referer('delete_snippet_' . intval($_GET['id'])); if (!current_user_can('manage_options')) { wp_die(__('You do not have permission.', 'pc-headers-and-footers-and-ad-pixels-5ake')); } $snippet = PC_HFAP_Snippet::get_by_id(intval($_GET['id'])); if ($snippet) { $result = $snippet->delete(); if ($result) { wp_redirect(admin_url('admin.php?page=pc-hfap-snippets&message=deleted')); exit; } } } // Show messages $message = isset($_GET['message']) ? $_GET['message'] : ''; if ($message === 'created') { echo '
Snippet created successfully!
Snippet updated successfully!
Snippet deleted successfully!
Security check failed. Please try again.
'; } elseif ($_GET['error'] === 'permission') { echo 'You do not have permission to perform this action.
Please fill in all required fields.
Failed to save snippet. Please try again.