Note: All code examples on this site are provided for developer reference/guidance only and we cannot guarantee that they will always work as expected. Our support policy does not include assistance with modifying or debugging code from any code examples, and they may be changed or removed if we find they no longer work due to changes in our plugins.
Please use the Code Snippets plugin, rather than adding the code samples below directly to your theme’s functions.php file. That will help ensure that any code errors won’t crash your site, and the changes will not be overwritten when you update your theme.
Hooks
The jobs
shortcode has a few hooks already:
job_manager_output_jobs_defaults
-
job_manager_output_jobs_args
-
job_manager_job_listings_output
To use hooks, you can start with the above hooks and trace the flow in the output_jobs
function to find others to see if there is an existing hook you can use.
Job Fields
Prefill the company logo field
add_filter('submit_job_form_fields', 'dm_prefill_company_logo'); // for users not logged in
add_filter('submit_job_form_fields_get_user_data', 'dm_prefill_company_logo'); // for logged in users
function dm_prefill_company_logo( $fields ) {
$fields['company']['company_logo']['value'] = 'full_url_to_the_logo';
return $fields;
}
Mandatory fields
Depending on which field you want to make mandatory, you can use or remove fields from the list.
add_filter( 'submit_job_form_fields', 'custom_submit_job_form_fields' , 11);
function custom_submit_job_form_fields( $fields ) {
$fields['job']['job_location']['required'] = true;
$fields['job']['job_tags']['required'] = true;
return $fields;
}
Prefill application email
/**Prefill application field in frontend form**/
add_filter('submit_job_form_fields_get_user_data', 'aas_prefill_application_field');
function aas_prefill_application_field( $fields ) {
$fields['job']['application']['value'] = 'hello@your-link.com';
return $fields;
}
Remove a field from the job submission page
add_filter( 'submit_job_form_fields', 'custom_submit_job_form_fields_dm' );
function custom_submit_job_form_fields_dm( $fields ) {
// in this example, we remove the job_tags field
unset($fields['job']['job_tags']);
// And return the modified fields
return $fields;
}
The above example removes the “job tags” field. You can also remove the following fields by replacing ['jobs']['INSERT_META_VALUE_HERE']
:
job_title
job_location
remote_position
job_description
job_type
job_category
application
job_salary
job_salary_currency
job_salary_unit
Remove all company details from the job submission page
If you want to remove the company details from the job submission form, for example, if all jobs are internal, or for the same company, you can do so by using the following snippet:
add_filter( 'submit_job_form_fields', 'gma_custom_submit_job_form_fields' );
function gma_custom_submit_job_form_fields( $fields ) {
unset($fields['company']['company_name']);
unset($fields['company']['company_website']);
unset($fields['company']['company_tagline']);
unset($fields['company']['company_video']);
unset($fields['company']['company_twitter']);
unset($fields['company']['company_logo']);
return $fields;
}
Change the default Job Type in job submission form to ‘volunteer’
add_filter( 'submit_job_form_fields', 'submit_job_form_fields_job_type_default' , 11);
function submit_job_form_fields_job_type_default( $fields )
{
$fields['job']['job_type']['default'] = 'volunteer'; // Slug of the job type
return $fields;
}
Prefill the Locations field for a job posting to a particular town’
add_filter('submit_job_form_fields', 'bk_prefill_jobs_location');
function bk_prefill_jobs_location( $fields ) {
$fields['job']['job_location']['value'] = 'Granite Falls, WA';
return $fields;
}
Redirects
Use alternative login page
add_filter( 'login_url', 'my_login_page', 10, 2 );
function my_login_page( $login_url, $redirect ) {
return home_url( '/my-custom-login-page/?redirect_to=' . $redirect );
}
Redirect to Job Dashboard after job submission
add_filter( 'job_manager_job_submitted', function() {
if ( wp_redirect( job_manager_get_permalink( 'job_dashboard' ) ) ) {
exit;
}
}, 20 );
Job Listings
Sort using custom field
function change_listing_args( $query_args ) {
if ( ! empty( $query_args['orderby']['menu_order'] ) ) {
$query_args['meta_key'] = '<your meta key name here>';
$query_args['orderby'] = array_merge(
array_splice( $query_args['orderby'], 0, 1 ),
[ 'meta_value_num' => 'ASC' ], // This is assuming that the custom meta is numeric and smaller numbers come first.
$query_args['orderby']
);
}
return $query_args;
}
add_filter( 'get_job_listings_query_args', 'change_listing_args' );
Disable Job Schema (Structured data)
You can add the filter below to your theme’s functions.php file for disabling the Job schema:
add_filter( 'wpjm_output_job_listing_structured_data', '__return_false' );
If you’re still seeing structured data in your site’s source after adding this snippet, please check to see if <!-- WP Job Manager Structured Data -->
is above the structured data you’re still seeing. If not, what you’re seeing is probably coming from something other than WP Job Manager, like your theme.
Search
Make custom meta field searchable
function my_wpjm_meta_key_dm() {
global $wpdb, $job_manager_keyword;
$searchable_meta_keys[] = '_my_meta_field';
return $searchable_meta_keys;
}
add_filter('job_listing_searchable_meta_keys', 'my_wpjm_meta_key_dm');
Improve WPJM search when using Polylang
add_filter( 'get_job_listings_query_args', 'pll_wpjm_change_search' );
function pll_wpjm_change_search( $args ) {
if ( function_exists( 'pll_current_language' ) ) {
$args['lang'] = pll_current_language();
}
return $args;
}
WP Admin
Remove “Listing Expires” column from Job Dashboard
/* This snippet removes the “Listing Expires” column from Job Dashboard */
add_filter( 'job_manager_job_dashboard_columns', 'remove_expires_column' );
function remove_expires_column( $columns ) {
unset( $columns['expires'] );
return $columns;
}
/* This snippet removes the “Listing Expires” column from All Jobs in wp-admin */
add_filter( 'manage_edit-job_listing_columns', 'remove_expires_column_admin' );
function remove_expires_column_admin( $columns ) {
unset( $columns['job_expires'] );
return $columns;
}
Prefill application email in WP-Admin
/**Prefill email in WP-Admin form**/
add_filter('job_manager_job_listing_wp_admin_fields', 'aas_prefill_application_address_wpadmin');
function aas_prefill_application_address_wpadmin( $fields ) {
$fields ['_application']['value'] = 'email@your-link.com';
return $fields;
}
Remove featured job checkbox from WP-Admin
add_filter('job_manager_job_listing_wp_admin_fields', 'aas_job_manager_remove_featured_checkbox');
function aas_job_manager_remove_featured_checkbox( $fields ) {
unset($fields['_featured']);
return $fields;
}
Geocoding / Geolocation
Specify the language to use for geocoding
add_filter( 'job_manager_geolocation_endpoint', 'change_geocode_lang' );
function change_geocode_lang( $endpoint ) {
// Use language from https://developers.google.com/maps/faq#using-google-maps-apis
return add_query_arg( 'language', 'en-GB', $endpoint );
}
More about this snippet can be found here.
Disable Geolocation
You can completely disable our geocoding feature by either: not putting in a Google Maps API Key or adding the following filter:
add_filter( 'job_manager_geolocation_enabled', '__return_false' );.
You can also filter out the latitude and longitude from the fields we save:
add_filter( 'job_manager_geolocation_get_location_data', function( $data ) {
unset( $data['lat'] );
unset( $data['long'] );
return $data;
} );
That should prevent WP Job Manager from ever saving those fields and instead just use the data you enter.
Other
Add Underline button to the TinyMCE editor toolbar
add_filter( 'submit_job_form_wp_editor_args', 'customize_editor_toolbar' );
function customize_editor_toolbar( $args ) {
$args['tinymce']['toolbar1'] = 'bold,italic,underline,|,bullist,numlist,|,link,unlink,|,undo,redo';
return $args;
}
Add Job ID to Job Meta
<li class="job-id"><?php echo "Job ID: " . $post->ID ?></li>
Note: Put this line of code inside the file content-single-job_listing_meta.php.
Increase HTTP timeout to 30 seconds
add_filter( 'http_request_timeout', 'wpjm_extend_http_timeout', 99 );
function wpjm_extend_http_timeout( $timeout ) {
return 30;
}
Add Display Job Categories Shortcode
function dm_display_wpjm_categories () {
$terms = get_terms( array(
'taxonomy' => 'job_listing_category',
'hide_empty' => false,
) );
if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){
echo '<ul>';
foreach ( $terms as $term ) {
echo '<li>' . '<a href="' . esc_url( get_term_link( $term ) ) . '">' . $term->name . '</a></li>';
}
echo '</ul>';
}
}
add_shortcode('list_categories', 'dm_display_wpjm_categories');
After adding the snippet, you can use the shortcode [list_categories] on a page to display the job categories. Please bear in mind that they will also link to the archive of job listings of the categories only if your theme has enabled full template support.
Add Display Job Categories Shortcode for a single listing
unction dm_display_wpjm_single_categories () {
$terms = wp_get_post_terms( get_the_ID(), 'job_listing_category' );
if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){
echo '<ul>';
foreach ( $terms as $term ) {
echo '<li>' . '<a href="' . esc_url( get_term_link( $term ) ) . '">' . $term->name . '</a></li>';
}
echo '</ul>';
}
}
add_shortcode('list_categories_single', 'dm_display_wpjm_single_categories');
add_theme_support( 'job-manager-templates' );
Enable comments on job listings
// Add comment support to the job listing post type - you'll need to enable the comments for old listings manually
add_filter( 'register_post_type_job_listing', 'register_post_type_job_listing_enable_comments' );
function register_post_type_job_listing_enable_comments( $post_type ) {
$post_type['supports'][] = 'comments';
return $post_type;
}
// Make comments open by default for new job listings
add_filter( 'submit_job_form_save_job_data', 'custom_submit_job_form_save_job_data' );
function custom_submit_job_form_save_job_data( $job_data ) {
$job_data['comment_status'] = 'open';
return $job_data;
}
Enable archives pagination support
add_filter( 'register_post_type_job_listing', function( $array ) {
$array['rewrite']['pages'] = true;
return $array;
} );
You will need to re-save the permalinks when you add this snippet.
Change location Anywhere to Remote
add_filter('gettext', 'translate_text');
function translate_text($translated) {
$translated = str_ireplace('Anywhere', 'Remote', $translated);
return $translated;
}
Filter your RSS feed by featured jobs only
function add_featured_job_flag( $query_args) {
$query_args[ 'meta_key' ] = '_featured';
$query_args[ 'meta_value' ] = 1;
return $query_args;
}
add_filter( 'job_feed_args', 'add_featured_job_flag' );
Once the filter is active, load the link to the feed above, and you should see that it is only showing featured jobs. If you’ve loaded that link previously, note that you may need to force-reload the page, or clear your browser cache before you can see the change.
Change Admin Email Address for notifications
// Admin Updated Job Notification
add_filter( 'job_manager_email_admin_updated_job_to', function( $email ) {
return 'email@example.com';
} );
// Admin New Job Notification
add_filter( 'job_manager_email_admin_new_job_to', function( $email ) {
return 'email@example.com';
} );
// Admin Expiring Job Notification
add_filter( 'job_manager_email_admin_expiring_job_to', function( $email ) {
return 'email@example.com';
} );
This snippet will even support multiple email addresses, if you like, for example:
return ['email.one@test.com',
'email.two@test.com'];
Turn off Jetpack’s Related Posts/Related Jobs
function jetpackme_remove_rp() {
if ( class_exists( 'Jetpack_RelatedPosts' ) ) {
if ( is_singular( 'job_listing' ) ) {
$jprp = Jetpack_RelatedPosts::init();
$callback = array( $jprp, 'filter_add_target_to_dom' );
remove_filter( 'the_content', $callback, 40 );
}
}
}
add_action( 'wp', 'jetpackme_remove_rp', 20 );
Strip shortcodes from the job description
add_filter( 'the_content', function( $content ) {
if ( 'job_listing' !== get_post_type() ) {
return $content;
}
return strip_shortcodes( $content );
} );
Promoted Jobs
Disable Promoted jobs
Use the following filters to hide the promote job column and prompt:
add_action( 'admin_enqueue_scripts', function() {
wp_dequeue_script( 'job_manager_job_editor_js' );
}, 90 );
add_action( 'init', function() {
if ( class_exists( 'WP_Job_Manager_Promoted_Jobs_Admin' ) ) {
remove_filter( 'manage_edit-job_listing_columns', [
WP_Job_Manager_Promoted_Jobs_Admin::instance(),
'promoted_jobs_columns',
] );
}
} );