WP Job Manager core plugin snippets

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.

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;
}
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; 
}
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'];
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 );
} );

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',
		] );
	}
} );

Code Snippets Documentation