Custom resume fields
You can add your own fields to resumes, for example a GitHub link or a preferred timezone. You declare a field once and it appears in the Resume Builder, the single-page resume form and the Quick Resume Form. If you prefer no code, use the Field Builder.
Add fields with code
Section titled “Add fields with code”The wcb_resume_form_fields filter receives the field groups (an empty array by default) and the resume post ID, and returns the groups. Each group has id, label and fields. Each field has key, label and type, plus optional required, placeholder, description and options.
add_filter( 'wcb_resume_form_fields', function( $groups, $resume_id ) { $groups[] = [ 'id' => 'links', 'label' => __( 'Online presence', 'my-plugin' ), 'fields' => [ [ 'key' => '_wcb_resume_github_url', 'label' => __( 'GitHub profile', 'my-plugin' ), 'type' => 'url', 'required' => false, ], [ 'key' => '_wcb_resume_website_url', 'label' => __( 'Personal website', 'my-plugin' ), 'type' => 'url', 'required' => false, ], ], ]; return $groups;}, 10, 2 );After you add this:
- The Resume Builder, the single-page form and the Quick Resume Form show the “Online presence” group.
- Each value is saved as post meta on the resume under the
keyyou declared. The key is lowercased when saved, and nothing is added in front of it, so pick a unique key. - Only keys you declare in the filter are saved. Other submitted keys are ignored.
- You read a value with
get_post_meta( $resume_id, '_wcb_resume_github_url', true ).
Field types
Section titled “Field types”text, textarea, email, tel, url, number, date, select, checkbox, radio, multiselect.
How values are cleaned before saving
Section titled “How values are cleaned before saving”email- cleaned as an email address.url- cleaned as a URL.number- saved as a number, or empty if the value is not numeric.date- saved only inYYYY-MM-DDform, otherwise empty.textarea- cleaned as multi-line text.checkbox- saved as1when on and empty when off.selectandradio- saved only if the value is one of the field’soptions, otherwise empty.multiselect- saved as a comma-separated list of the chosen option values.- Everything else - cleaned as single-line text.
To reject or change a value, use the wcb_save_custom_field filter. It receives the cleaned value, the field key and the resume ID. Return null to skip saving, or a scalar to replace the value.
Pre-fill the Resume Builder
Section titled “Pre-fill the Resume Builder”The wcb_resume_form_initial_state filter changes what the Resume Builder starts with. It receives the state array and the resume post ID. Custom field values sit under the customFields key of the state, keyed by field key.
add_filter( 'wcb_resume_form_initial_state', function( $state, $resume_id ) { $author_id = (int) get_post_field( 'post_author', $resume_id ); $links = get_user_meta( $author_id, '_partner_profile_links', true ); if ( $links ) { $state['customFields']['_wcb_resume_github_url'] = $links['github'] ?? ''; } return $state;}, 10, 2 );This filter applies to the Resume Builder only.
Save and read over the REST API
Section titled “Save and read over the REST API”- Save:
PUT /wcb/v1/resumes/{id}with acustom_fieldsobject in the body, keyed by field key. - Read:
GET /wcb/v1/resumes/{id}does not return custom fields by default. Add them with thewcb_rest_prepare_resumefilter. It receives the response data, the resume post, the request and a context string.

