[
'name' => 'Contact Messages',
'singular_name' => 'Contact Message'
],
'public' => false,
'show_ui' => true,
'menu_icon' => 'dashicons-email',
'supports' => ['title']
]);
}
// Handle Form Submission (Save Data)
add_action('init', 'register_contact_messages_cpt');
add_action('admin_post_submit_contact_form', 'handle_contact_form');
add_action('admin_post_nopriv_submit_contact_form', 'handle_contact_form');
function handle_contact_form() {
if (!isset($_POST['contact_nonce']) ||
!wp_verify_nonce($_POST['contact_nonce'], 'contact_form_nonce')) {
wp_die('Security check failed');
}
$post_id = wp_insert_post([
'post_type' => 'contact_message',
'post_title' => sanitize_text_field($_POST['subject']),
'post_status' => 'publish'
]);
if ($post_id) {
update_post_meta($post_id, 'name', sanitize_text_field($_POST['name']));
update_post_meta($post_id, 'email', sanitize_email($_POST['email']));
update_post_meta($post_id, 'contact_number', sanitize_text_field($_POST['contact_number']));
update_post_meta($post_id, 'message', sanitize_textarea_field($_POST['message']));
}
wp_redirect(home_url());
exit;
}
// Add Custom Columns
add_filter('manage_contact_message_posts_columns', function ($columns) {
$new_columns = [];
$new_columns['cb'] = $columns['cb']; // checkbox
$new_columns['title'] = 'Subject';
$new_columns['name'] = 'Name';
$new_columns['email'] = 'Email';
$new_columns['contact_number'] = 'Contact Number';
$new_columns['message'] = 'Message';
$new_columns['date'] = $columns['date'];
return $new_columns;
});
// Fill Column Data
add_action('manage_contact_message_posts_custom_column', function ($column, $post_id) {
switch ($column) {
case 'name':
echo esc_html(get_post_meta($post_id, 'name', true));
break;
case 'email':
echo esc_html(get_post_meta($post_id, 'email', true));
break;
case 'contact_number':
echo esc_html(get_post_meta($post_id, 'contact_number', true));
break;
case 'message':
echo esc_html(wp_trim_words(
get_post_meta($post_id, 'message', true),
7,
'…'
));
break;
}
}, 10, 2);
// Contact form FULL MESSAGE VIEW (ON CLICK)
add_action('add_meta_boxes', function () {
add_meta_box(
'contact_message_details',
'Message Details',
function ($post) {
?>
Name: ID, 'name', true)); ?>
Email: ID, 'email', true)); ?>
Contact: ID, 'contact_number', true)); ?>
Message:
ID, 'message', true))); ?>
'contact_message',
'posts_per_page' => -1
]);
while ($query->have_posts()) {
$query->the_post();
fputcsv($output, [
get_post_meta(get_the_ID(), 'name', true),
get_post_meta(get_the_ID(), 'email', true),
get_post_meta(get_the_ID(), 'contact_number', true),
get_the_title(),
get_post_meta(get_the_ID(), 'message', true),
]);
}
fclose($output);
exit; // important: stop WordPress from outputting anything else
}
});
// Create a Custom Post Type for Pre-Registration
// Register Pre-Registration CPT
add_action('init', function() {
$labels = [
'name' => 'Pre-Registrations',
'singular_name' => 'Pre-Registration',
'menu_name' => 'Pre-Registrations',
'all_items' => 'All Pre-Registrations',
'add_new_item' => 'Add New Pre-Registration',
];
$args = [
'labels' => $labels,
'public' => false,
'show_ui' => true,
'show_in_menu' => true,
'supports' => ['title'], // title can be student's name
];
register_post_type('pre_registration', $args);
});
// Handle Pre-Registration Form Submission
add_action('wp_ajax_nopriv_submit_preregistration', 'handle_preregistration_form');
add_action('wp_ajax_submit_preregistration', 'handle_preregistration_form');
function handle_preregistration_form() {
// Sanitize input
$guardian_name = sanitize_text_field($_POST['guardian_name'] ?? '');
$student_name = sanitize_text_field($_POST['student_name'] ?? '');
$email = sanitize_email($_POST['email'] ?? '');
$contact = sanitize_text_field($_POST['contact'] ?? '');
$course = sanitize_text_field($_POST['course'] ?? '');
// Create a new post
$post_id = wp_insert_post([
'post_type' => 'pre_registration',
'post_title' => $student_name,
'post_status' => 'publish',
]);
if($post_id) {
// Save custom fields
update_post_meta($post_id, 'guardian_name', $guardian_name);
update_post_meta($post_id, 'student_name', $student_name);
update_post_meta($post_id, 'email', $email);
update_post_meta($post_id, 'contact', $contact);
update_post_meta($post_id, 'course', $course);
// Send email to submitted email address
$subject = "Pre-Registration Confirmation";
$message = "Hello $guardian_name,\n\n";
$message .= "Thank you for pre-registering your student, $student_name, for the $course course.\n";
$message .= "We will contact you shortly.\n\n";
$message .= "Best regards,\nYour School/Institute Name";
$headers = ['Content-Type: text/plain; charset=UTF-8'];
wp_mail($email, $subject, $message, $headers);
wp_send_json_success('Form submitted successfully!');
}
wp_send_json_error('Failed to submit form.');
}
// Show Data of preresigtraion in Admin Panel (Columns)
// Add columns
add_filter('manage_pre_registration_posts_columns', function($columns){
$columns['guardian_name'] = 'Guardian';
$columns['email'] = 'Email';
$columns['contact'] = 'Contact';
$columns['course'] = 'Course';
return $columns;
});
// Populate columns
add_action('manage_pre_registration_posts_custom_column', function($column, $post_id){
switch($column){
case 'guardian_name':
echo esc_html(get_post_meta($post_id, 'guardian_name', true));
break;
case 'email':
echo esc_html(get_post_meta($post_id, 'email', true));
break;
case 'contact':
echo esc_html(get_post_meta($post_id, 'contact', true));
break;
case 'course':
echo esc_html(get_post_meta($post_id, 'course', true));
break;
}
}, 10, 2);
// Export CSV for Pre-Registrations
// Add submenu page
add_action('admin_menu', function () {
add_submenu_page(
'edit.php?post_type=pre_registration',
'Export CSV',
'Export CSV',
'manage_options',
'export-pre-registration-csv',
'__return_null'
);
});
// CSV export
add_action('admin_init', function () {
if (isset($_GET['page']) && $_GET['page'] === 'export-pre-registration-csv') {
ob_start();
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename=pre-registrations.csv');
$output = fopen('php://output', 'w');
fputcsv($output, ['Guardian Name','Student Name','Email','Contact','Course']);
$query = new WP_Query(['post_type'=>'pre_registration','posts_per_page'=>-1]);
while($query->have_posts()){
$query->the_post();
fputcsv($output, [
get_post_meta(get_the_ID(), 'guardian_name', true),
get_post_meta(get_the_ID(), 'student_name', true),
get_post_meta(get_the_ID(), 'email', true),
get_post_meta(get_the_ID(), 'contact', true),
get_post_meta(get_the_ID(), 'course', true),
]);
}
fclose($output);
exit;
}
});