admin-post.php results on white screen after form submission

This is a strange error because it wasn't happening earlier, it was actually all working fine. I have removed all the code I have added since I last tested it and it was working before it broke.

I have a custom post acting as a page to submit a form on and I am processing the form via a function in the functions.php page in my plugin.

function tm_add_new_job() {

    if ( empty($_POST) || !wp_verify_nonce($_POST['tm_add_new_job'],'tm_add_new_job') ) {

        wp_nonce_ays();

        die();

    } else {

        $type = $_POST['contacttype'];

        switch ($type) {

            case 'email':

                $title   = $_POST['title'];
                $name    = $_POST['name'];
                $surname = $_POST['surname'];
                $email   = $_POST['email'];

                if (!empty($email)) {

                    // Post new job and customer
                    $new_customer_id = tm_add_customer($title, $name, $surname);

                    $new_job_id      = tm_add_job($new_customer_id);

                    // Assign link to about_you page
                    $about_you       = get_page_by_path( 'about-you', '', 'jobs' );

                    $linked          = get_post_permalink($about_you-ID);

                    $secret          = get_post_meta( $new_customer_id, 'customer_secret', true );

                    $link            = $linked .'?customer='. $new_customer_id .'secret='. $secret;

                    tm_mail_lead($email, $from, $custom, $link);

                    // Add job ID to customer
                    add_metadata( 'post', $new_customer_id, 'job_id', $new_job_id, false );

                    if (!empty($title)) {

                        // Add customer title
                        add_metadata( 'post', $new_customer_id, 'customer_title', $title, false );

                    }

                    if (!empty($name)) {

                        // Add customer name
                        add_metadata( 'post', $new_customer_id, 'customer_name', $name, false );

                    }

                    if (!empty($surname)) {

                        // Add customer surname
                        add_metadata( 'post', $new_customer_id, 'customer_surname', $surname, false );

                    }

                    // Add customer email
                    add_post_meta( $new_customer_id, 'customer_email', $email, false );

                } else {

                    // No email - Fail
                    wp_redirect( tm_new_job_link());
                }

                break;

            case 'text':

                $title   = $_POST['sms_title'];
                $name    = $_POST['sms_name'];
                $surname = $_POST['sms_surname'];
                $mobile  = $_POST['mobile'];

                if (!empty($mobile)) {

                    // Post new job and customer
                    $new_customer_id = tm_add_customer($title, $name, $surname);

                    $new_job_id      = tm_add_job($new_customer_id);

                    // Add job ID to customer
                    add_metadata( 'post', $new_customer_id, 'job_id', $new_job_id, false );

                    if (!empty($title)) {

                        // Add customer title
                        add_metadata( 'post', $new_customer_id, 'customer_title', $title, false );

                    }

                    if (!empty($name)) {

                        // Add customer name
                        add_metadata( 'post', $new_customer_id, 'customer_name', $name, false );

                    }

                    if (!empty($surname)) {

                        // Add customer surname
                        add_metadata( 'post', $new_customer_id, 'customer_surname', $surname, false );

                    }

                    // Add customer email
                    add_metadata( 'post', $new_customer_id, 'customer_mobile', $mobile, false );

                } else {

                    // No Mobile Number - Fail
                    wp_redirect( tm_new_job_link());
                }


                break;

            case 'customer':

                $image = 'quoting.png';

                break;

        }

        if ($_FILES) {

            // Make sure that this file is included, as wp_generate_attachment_metadata() depends on it.
            require_once(ABSPATH . "wp-admin" . '/includes/image.php');
            require_once(ABSPATH . "wp-admin" . '/includes/file.php');
            require_once(ABSPATH . "wp-admin" . '/includes/media.php');

            $file = $_FILES[featured_image];

            $file_return = wp_handle_upload( $file, array('action' = 'tm_add_new_job' ) );

            if( isset( $file_return['error'] ) || isset( $file_return['upload_error_handler'] ) ) {

              return false;

            } else {

                $filename = $file_return['file'];

                $attachment = array(
                    'post_mime_type' = $file_return['type'],
                    'post_title'     = preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
                    'post_content'   = '',
                    'post_status'    = 'inherit',
                    'guid' = $file_return['url']
                );

                $attachment_id = wp_insert_attachment( $attachment, $file_return['url'] );

                // Generate the metadata for the attachment, and update the database record.
                $attachment_data = wp_generate_attachment_metadata( $attachment_id, $filename );
                wp_update_attachment_metadata( $attachment_id, $attachment_data );

                set_post_thumbnail( $new_job_id, $attachment_id );

            }

        }

        // success go to new job post.
        wp_redirect( get_permalink($new_job_id));
    }

}
add_action( 'admin_post_tm_add_new_job', 'tm_add_new_job' );

FYI: The form works and the data is inserted into the database, the only problem is it is stuck on a blank (white screen) admin-post.php page. What am I doing wrong here?

UPDATE:

I have discovered that it redirects only if I upload an image?

Topic fatal-error wp-admin Wordpress

Category Web


This might be an issue:

wp_redirect( tm_new_job_link()); has to be followed by exit;


The problem was:

if ($_FILES) {}

Can someone explain this to me? The wp_redirect() is outside of this if statement so why wouldn't it redirect? Is it because that if statement was still firing but ran into an error as no files were being uploaded?

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.