Author Archive

Managing submitted jobs

Managing submitted jobs

The main admin page, found in Admin > Job Listings, lists submitted jobs in table format.

Actions

Job actions are shown below the job title when you hover over a job listing:

The actions shown on a job row vary depending on the status of the job. For example, jobs pending approval will have the ‘Approve’ action.

Actions include:

  1. Approve – publishes pending listings
  2. Edit
  3. View
  4. Delete

Editing a job listing

Clicking the job listings title, or the edit action button, will allow you to edit the job and job meta data.

Receiving notifications for submitted jobs

Job Manager does not send notifications for new jobs/jobs pending approval, however, you can use a third party plugin such as Post Status Notifier to achieve this.

How to Submit a Job Listing via Front-End

Please note: Saving a draft is not the same as submitting a listing.

To create a job listing, fill out the form with all the required information for your position. You have two options as you go:

  • Save Draft: Save your progress and return later to finish editing.
  • Preview: See how your listing will appear once published.

Once you’ve entered all the necessary details, click Preview. On the preview screen, review your listing one last time, then click Submit Listing to send it for review by our staff.

Your job listing will not be submitted until you click Submit Listing on the preview screen.

Applications: Limit past applications per page

By default, the [past_applications] shortcode displays 25 past applications per page. To change that, add the following code using the Code Snippets plugin and adjust the value as desired:

add_filter( 'job_manager_job_applications_past_args', 'change_past_application_args');

function change_past_application_args( $args ) {
  $args['posts_per_page'] = 5;
  $args['offset'] = ( max( 1, get_query_var( 'paged' ) ) - 1 ) * $args['posts_per_page'];
  return $args;
}

Resume Manager: Template tags

the_candidate_location

the_candidate_location( $map_link = true, $post = null )

Uses `get_the_candidate_location` and outputs the candidates location including an optional link to google maps.

the_candidate_title

the_candidate_title( $before = ”, $after = ”, $echo = true, $post = null )

Uses `get_the_candidate_title` to output the candidates current or desired job title.

the_candidate_photo

the_candidate_photo( $size = ‘full’, $default = null, $post = null )

Uses `get_the_candidate_photo` to output the candidates photo (or a placeholder).

the_resume_category

the_resume_category( $post = null )

Uses `get_the_resume_category` to output the name of the category the resume was posted in.

the_resume_status

the_resume_status( $post = null )

Uses `get_the_resume_status` to output the resumes current status e.g. active.

WC Paid Listings: Give a free package to a new user

Please note that all code examples on this site are provided for 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.

A common request is to give a free package to newly signed-up users. This can be done with a small snippet added to a plugin like Code Snippets:

add_action( 'user_register', 'give_wcpl_user_package_on_registration' );

function give_wcpl_user_package_on_registration( $user_id ) {
	global $wpdb;

	$wpdb->insert(
		"{$wpdb->prefix}wcpl_user_packages",
		array(
			'user_id'          => $user_id,
			'product_id'       => 0,
			'package_count'    => 0,
			'package_duration' => 30,
			'package_limit'    => 1,
			'package_featured' => 0,
			'package_type'     => 'job_listing'
		)
	);
}

Optionally you may want to only give a free package to employers. If that’s the case, use this instead:

add_action( 'user_register', 'give_wcpl_user_package_on_registration' );

function give_wcpl_user_package_on_registration( $user_id ) {
	global $wpdb;
	
	if ( wpjm_check_user_role( 'employer', $user_id ) ) {
		$wpdb->insert(
			"{$wpdb->prefix}wcpl_user_packages",
			array(
				'user_id'          => $user_id,
				'product_id'       => 0,
				'package_count'    => 0,
				'package_duration' => 30,
				'package_limit'    => 1,
				'package_featured' => 0,
				'package_type'     => 'job_listing'
			)
		);
	}
}

function wpjm_check_user_role( $role, $user_id = null ) {
    if ( is_numeric( $user_id ) ) {
		$user = get_userdata( $user_id );
    } else {
        $user = wp_get_current_user();
    }
    if ( empty( $user ) ) {
		return false;
    }
    return in_array( $role, (array) $user->roles );
}

Tutorial: Remove the Resume Preview Step

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.

To remove the Preview step during the resume submission process, add the following code to a plugin like Code Snippets:

/**
 * Remove the preview step when submitting resumes.
 * @param  array $steps
 * @return array
 */
add_filter( 'submit_resume_steps', function( $steps ) {
	unset( $steps['preview'] );
	return $steps;
} );

/**
 * Change button text.
 */
add_filter( 'submit_resume_form_submit_button_text', function() {
	return __( 'Submit Resume', 'wp-job-manager-resumes' );
} );

/**
 * Since we removed the preview step and it's handler, we need to manually publish resumes.
 * @param  int $resume_id
 */
add_action( 'resume_manager_update_resume_data', function( $resume_id ) {
	$resume = get_post( $resume_id );
	if ( in_array( $resume->post_status, array( 'preview', 'expired' ), true ) ) {
		delete_post_meta( $resume->ID, '_resume_expires' );
		$update_resume                  = array();
		$update_resume['ID']            = $resume->ID;
		$update_resume['post_status']   = get_option( 'resume_manager_submission_requires_approval' ) ? 'pending' : 'publish';
		$update_resume['post_date']     = current_time( 'mysql' );
		$update_resume['post_date_gmt'] = current_time( 'mysql', 1 );
		wp_update_post( $update_resume );
	}
} );

Basically this does a few things:

  1. Remove the preview step
  2. Change preview text to Submit Resume
  3. Manually publish resume (as the preview handler normally does this)

Simple Paid Listings

Overview

Using the Simple Paid Listings plugin you can charge a single fee to list a job on your site using either Stripe or PayPal to collect the funds.

Note that this plugin does not allow coupons, discounts, or anything other than a simple “pay $X for job listing”. For additional capabilities, consider using WooCommerce Paid Listings instead.

Installation

To install this plugin, please refer to the guide at: https://wordpress.org/support/article/managing-plugins/#installing-plugins

Setup

After installation, head over to Job Listings > Settings > Paid Listings to configure your paid listings and gateways:

  • Listing Cost – Enter the cost of new listings, excluding currency symbols (e.g., 9.99)
  • Currency Code – Enter your desired currency code (USD for US Dollars, GBP for British Pounds Sterling)
  • Payment Gateway – Choose either Stripe Checkout or PayPal Standard

Stripe Checkout Settings

  • Secret Key – Obtain from Stripe; test mode requires keys prepended with sk_test_
  • Publishable Key – Obtain from Stripe; test mode requires keys prepended with pk_test_

PayPal Standard Configuration

  • PayPal Email – Your seller’s PayPal email address
  • PayPal Identity Token – Optional but recommended for Payment Data Transfer verification
  • PayPal Sandbox – Enable for testing without live payments

Job Submission Flow

The submission process is identical up to the preview page. On preview, the confirm button changes to “Pay for Listing”.

With Stripe Checkout

Clicking “Pay for Listing” opens the payment page. Upon successful payment, the job is marked paid and goes live or awaits approval based on your settings.

With PayPal Standard

Users are redirected to PayPal’s site for payment. After completion, they return to the job submission page.

Security/HTTPS

When using Stripe Checkout, set your Job Submission page to HTTPS.

Troubleshooting

Do not use Simple Paid Listings simultaneously with WooCommerce Paid Listings, as this causes unexpected behavior.

Applications: Limiting applications to a certain role

Please note: All code examples and plugin suggestions are provided for reference or 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, or providing support for any suggested 3rd-party plugins.

A common request is to limit the actual application form to a certain user role. This is possible with a small amount of customisation, as follows:

1. Override the Template File

Copy the plugin file wp-job-manager-applications/templates/application-form.php to YOURTHEME/wp-job-manager-applications/application-form.php. The version you copy to your theme will take priority.

2. Edit the Template File

Inside your newly copied file, you can use the current_user_can function to check if a user can apply.

At the top of the file add:

<?php if ( current_user_can( 'ROLE' ) ) : ?>

Replace ROLE with your desired role or capability, for example, ‘subscriber’.

At the end of the file add:

<?php else : ?>
Custom content here shown to users without access.
<?php endif; ?>

The application form will now only be visible to the users with permission.

Note: According to the WordPress codex on the current_user_can function, checking against roles rather than capabilities may produce unreliable results, so custom implementations cannot be guaranteed to work consistently.

What Data Does WP Job Manager Track?

Overview

For users who opt-in to usage tracking in WP Job Manager, certain information about your site’s content and settings will be tracked and stored. This enables better feature development decisions and targeted messaging.

WP Job Manager Info and System Info tracking data is sent automatically once opted in, then once every 2 weeks. Event tracking is sent as events occur. Data handling follows Automattic’s Privacy Policy.

WP Job Manager Info

Tracked metrics include:

  • Total number of users with WP Job Manager-specific roles (e.g., employers)
  • Custom post type counts by status (e.g., job listings, company video fields)
  • Taxonomy counts (e.g., job types, descriptions)
  • Jobs by default type
  • Shortcode attribute usage
  • All WP Job Manager settings values
  • User interactions within the WordPress admin for WP Job Manager content

System Info

Tracked system data includes:

  • Site URL and admin email
  • Activated plugins and versions
  • Active theme and version
  • WordPress and PHP versions
  • Locale/language and multisite status

Events

  • Job listing submissions (source only: admin or frontend form)
  • Extension license activation/deactivation and errors

Applications: Customising Application Statuses

Applications by default has the following statuses (these are custom post type statuses):

  1. New
  2. Interviewed
  3. Offer Extended
  4. Hired
  5. Archived
  6. Rejected

From version 1.7.0+ these statuses can be customised by using the filter job_application_statuses.

Adding a Status Example

This example adds a new status called ‘Example’. The code would be placed in your theme functions.php file or a custom plugin.

add_filter( 'job_application_statuses', 'add_new_job_application_status' );

function add_new_job_application_status( $statuses ) {
	$statuses['example'] = _x( 'Example', 'job_application', 'wp-job-manager-applications' );
	$statuses['another_example'] = _x( 'Another Example', 'job_application', 'wp-job-manager-applications' );
	$statuses['a_third_example'] = _x( 'A Third Example', 'job_application', 'wp-job-manager-applications' );
	return $statuses;
}

Removing a Status Example

This example removes the ‘offer extended’ status.

add_filter( 'job_application_statuses', 'add_new_job_application_status' );

function add_new_job_application_status( $statuses ) {
	unset( $statuses['offer'] );
	return $statuses;
}

Job Tags

Overview

Using the Job Tags plugin you can add a new ‘job tags’ field to the submit process, show jobs filtered by tag via shortcodes, and add tag filtering to the standard jobs shortcode.

Installation

To install this plugin, please refer to the guide here: https://wordpress.org/support/article/managing-plugins/#installing-plugins

Setup

After installation, head over to Job Listings > Settings to configure the plugin.

  • Job Listings > Enable Tag Archives – Enabling tag archives will make job tags link through to an archive of all jobs with said tag.
  • Job Submission > Maximum Job Tags – Enter a number to limit the amount of tags users can define when submitting a job.
  • Job Submission > Tag Input – Choose from Text Box, Multiselect, or Checkboxes for tag input method.

Modifications to the Job Submission Flow

This plugin adds a ‘Job Tags’ field to the Job Submission Process. Tags of 3 characters or fewer are forced to uppercase as abbreviations. Other tags become lowercase to prevent duplicates.

Tag Display

Job tags appear after the job description and are only linked if tag archives are enabled.

Tag Filters

The standard [jobs] shortcode is automatically enhanced with a tag filter section when at least one tag is assigned to a listing. Disable this by adding ‘show_tags=false’ to the shortcode.

The Tag Cloud Shortcode

Use the [job_tag_cloud] shortcode to display job tags. Tags are only linked when tag archives are enabled. Example: [job_tag_cloud orderby="count" number="10"]

The Jobs by Tag Shortcode

The [jobs_by_tag] shortcode outputs jobs matching specific tags. Accepts parameters like per_page, orderby, order, tag, and tags. Examples: [jobs_by_tag per_page="10" tag="your-tag"] or [jobs_by_tag per_page="10" tags="tag-1,tag-2"]

Editing User-Submitted Tags on an Existing Job

A known issue exists where the Job Tags block doesn’t display properly in the WordPress block editor. The workaround is to install the Classic Editor plugin to revert to the legacy editor.