‘BBB Submissions’,
‘singular_name’ => ‘BBB Submission’,
‘menu_name’ => ‘BBB Submissions’
);
$args = array(
‘labels’=>$labels,
‘public’=>false,
‘show_ui’=>true,
‘supports’=>array(‘title’,’editor’,’custom-fields’),
‘capability_type’=>’post’,
);
register_post_type(‘bbb_submission’, $args);
}// 2) Shortcode to output a nonce hidden field for secure submissions (use in PHP templates or via do_shortcode)
add_shortcode(‘bbb_nonce_field’, function(){
if(function_exists(‘wp_create_nonce’)){
return ‘
‘;
}
return ”;
});// 3) Utility: central handler to store submission and send email
function bbb_store_and_notify($type, $data = array(), $redirect = ‘/’){
$admin_email = get_option(‘admin_email’);
$now = current_time(‘mysql’);
$title = sprintf(‘%s Submission โ %s โ %s’, strtoupper($type), isset($data[‘name’]) ? $data[‘name’] : ‘No name’, date(‘Y-m-d H:i’, strtotime($now)));
// store as private post
$post_id = wp_insert_post(array(
‘post_title’ => $title,
‘post_content’ => maybe_serialize($data),
‘post_status’ => ‘private’,
‘post_type’ => ‘bbb_submission’
));if(!is_wp_error($post_id) && $post_id){
foreach($data as $k=>$v){
if(is_array($v)) $v = maybe_serialize($v);
add_post_meta($post_id, sanitize_key($k), sanitize_text_field(is_string($v)? $v : wp_json_encode($v)));
}
}// prepare email
$subject = “BBB {$type} Submission: ” . (isset($data[‘name’]) ? $data[‘name’] : ‘New Submission’);
$body = “
New BBB {$type} Submission “;
foreach($data as $k=>$v){
if(is_array($v)) $v = print_r($v,true);
$body .= ““.esc_html($k).” “.nl2br(esc_html($v)).” “;
}
$body .= “
“;
$headers = array(‘Content-Type: text/html; charset=UTF-8’);
// send email
wp_mail($admin_email, $subject, $body, $headers);// redirect (safe)
wp_redirect( esc_url_raw( $redirect ) );
exit;
}// 4) Ambassador handler
add_action(‘admin_post_nopriv_bbb_ambassador_submit’,’bbb_handle_ambassador’);
add_action(‘admin_post_bbb_ambassador_submit’,’bbb_handle_ambassador’);
function bbb_handle_ambassador(){
if($_SERVER[‘REQUEST_METHOD’] !== ‘POST’){
wp_safe_redirect(home_url(‘/’)); exit;
}// Optional nonce check โ if present validate, otherwise continue (for static HTML forms)
if(!empty($_POST[‘bbb_nonce’])){
if(!wp_verify_nonce($_POST[‘bbb_nonce’],’bbb_form_nonce’)){
wp_die(‘Security check failed (nonce).’); exit;
}
}$name = isset($_POST[‘brader_name’]) ? sanitize_text_field($_POST[‘brader_name’]) : ”;
$email = isset($_POST[‘brader_email’]) ? sanitize_email($_POST[‘brader_email’]) : ”;
$location = isset($_POST[‘brader_location’]) ? sanitize_text_field($_POST[‘brader_location’]) : ”;
$focus = isset($_POST[‘brader_focus’]) ? sanitize_text_field($_POST[‘brader_focus’]) : ”;
$source = isset($_POST[‘source’]) ? sanitize_text_field($_POST[‘source’]) : ‘homepage’;$data = array(
‘type’ => ‘Ambassador’,
‘name’ => $name,
’email’ => $email,
‘location’ => $location,
‘focus’ => $focus,
‘source’ => $source,
‘ip’ => $_SERVER[‘REMOTE_ADDR’],
‘user_agent’ => isset($_SERVER[‘HTTP_USER_AGENT’])? sanitize_text_field($_SERVER[‘HTTP_USER_AGENT’]) : ”
);// Redirect to welcome page after submission
$redirect = home_url(‘/welcome/’);
bbb_store_and_notify(‘Ambassador’, $data, $redirect);
}// 5) Sponsor handler
add_action(‘admin_post_nopriv_bbb_sponsor_submit’,’bbb_handle_sponsor’);
add_action(‘admin_post_bbb_sponsor_submit’,’bbb_handle_sponsor’);
function bbb_handle_sponsor(){
if($_SERVER[‘REQUEST_METHOD’] !== ‘POST’) { wp_safe_redirect(home_url(‘/’)); exit; }
if(!empty($_POST[‘bbb_nonce’])){
if(!wp_verify_nonce($_POST[‘bbb_nonce’],’bbb_form_nonce’)){ wp_die(‘Security check failed (nonce).’); exit; }
}$brand = isset($_POST[‘sponsor_brand’]) ? sanitize_text_field($_POST[‘sponsor_brand’]) : ”;
$contact = isset($_POST[‘sponsor_contact’]) ? sanitize_text_field($_POST[‘sponsor_contact’]) : ”;
$email = isset($_POST[‘sponsor_email’]) ? sanitize_email($_POST[‘sponsor_email’]) : ”;
$interest = isset($_POST[‘sponsor_interest’]) ? sanitize_text_field($_POST[‘sponsor_interest’]) : ”;$data = array(
‘type’ => ‘Sponsor’,
‘brand’ => $brand,
‘contact’ => $contact,
’email’ => $email,
‘interest’ => $interest,
‘ip’ => $_SERVER[‘REMOTE_ADDR’],
‘user_agent’ => isset($_SERVER[‘HTTP_USER_AGENT’])? sanitize_text_field($_SERVER[‘HTTP_USER_AGENT’]) : ”
);// Redirect to a sponsor thank-you or welcome
$redirect = home_url(‘/welcome/?from=sponsor’);
bbb_store_and_notify(‘Sponsor’, $data, $redirect);
}// 6) Peraduan (competition) handler
add_action(‘admin_post_nopriv_bbb_peraduan_submit’,’bbb_handle_peraduan’);
add_action(‘admin_post_bbb_peraduan_submit’,’bbb_handle_peraduan’);
function bbb_handle_peraduan(){
if($_SERVER[‘REQUEST_METHOD’] !== ‘POST’) { wp_safe_redirect(home_url(‘/’)); exit; }
if(!empty($_POST[‘bbb_nonce’])){
if(!wp_verify_nonce($_POST[‘bbb_nonce’],’bbb_form_nonce’)){ wp_die(‘Security check failed (nonce).’); exit; }
}$name = isset($_POST[‘entry_name’]) ? sanitize_text_field($_POST[‘entry_name’]) : ”;
$phone = isset($_POST[‘entry_phone’]) ? sanitize_text_field($_POST[‘entry_phone’]) : ”;
$email = isset($_POST[‘entry_email’]) ? sanitize_email($_POST[‘entry_email’]) : ”;
$file = isset($_POST[‘entry_file’]) ? esc_url_raw($_POST[‘entry_file’]) : ”;// optional handling if a file was uploaded via input type=”file” named ‘entry_file_upload’
if(!empty($_FILES[‘entry_file_upload’]) && $_FILES[‘entry_file_upload’][‘size’] > 0){
require_once(ABSPATH . ‘wp-admin/includes/file.php’);
$uploaded = wp_handle_upload($_FILES[‘entry_file_upload’], array(‘test_form’=>false));
if(isset($uploaded[‘url’])){
$file = esc_url_raw($uploaded[‘url’]);
}
}$data = array(
‘type’ => ‘Peraduan’,
‘name’ => $name,
‘phone’ => $phone,
’email’ => $email,
‘file’ => $file,
‘ip’ => $_SERVER[‘REMOTE_ADDR’],
‘user_agent’ => isset($_SERVER[‘HTTP_USER_AGENT’])? sanitize_text_field($_SERVER[‘HTTP_USER_AGENT’]) : ”
);$redirect = home_url(‘/peraduan-thanks/’);
bbb_store_and_notify(‘Peraduan’, $data, $redirect);
}// 7) Admin menu page to view submissions quickly
add_action(‘admin_menu’,’bbb_submissions_admin_menu’);
function bbb_submissions_admin_menu(){
add_menu_page(‘BBB Submissions’,’BBB Submissions’,’manage_options’,’bbb-submissions’,’bbb_submissions_page_fn’,’dashicons-archive’,26);
}function bbb_submissions_page_fn(){
if(!current_user_can(‘manage_options’)) wp_die(‘Insufficient permissions’);
$args = array(‘post_type’=>’bbb_submission’,’posts_per_page’=>50,’post_status’=>’private’,’orderby’=>’date’,’order’=>’DESC’);
$subs = get_posts($args);
echo ‘
BBB Submissions (latest 50) Date Type Name / Email View ‘;
if($subs){
foreach($subs as $s){
$meta = get_post_meta($s->ID);
$type = isset($meta[‘type’][0]) ? esc_html($meta[‘type’][0]) : ‘N/A’;
$name = isset($meta[‘name’][0]) ? esc_html($meta[‘name’][0]) : (isset($meta[‘brand’][0]) ? esc_html($meta[‘brand’][0]) : ‘โ’);
$email = isset($meta[’email’][0]) ? esc_html($meta[’email’][0]) : ‘โ’;
$view_link = admin_url(‘post.php?post=’.$s->ID.’&action=edit’);
echo ‘‘.esc_html($s->post_date).’ ‘.esc_html($type).’ ‘.esc_html($name).’ / ‘.esc_html($email).’ Open ‘;
}
} else {
echo ‘No submissions yet. ‘;
}
echo ‘
‘;
}// 8) Helpful: ensure wp_mail works (recommendation printed to admin)
add_action(‘admin_notices’,’bbb_check_mail_setup’);
function bbb_check_mail_setup(){
if(!current_user_can(‘manage_options’)) return;
// show a small notice if WP Mail may not be configured (optional)
if(!get_option(‘bbb_mail_check_shown’)){
echo ‘
BBB Notice: Ensure outgoing email works (install WP Mail SMTP and set From: admin@bbb-official.com) for reliable form delivery.
‘;
update_option(‘bbb_mail_check_shown’,1);
}
}
?>