WP Job Manager and BuddyPress Private Messages

This post describes how to configure WP Job Manager plugin to be able to send a job application as a BuddyPress private message rather than email or a web link.

Needless to say, use at your risk. Don’t blame me if your site goes kaput (it happened to me when I screwed up the spelling of one of the variables). Before implementing it on your production site, please test it on a personal machine.

Only two files need to be changed.

1. JOB-APPLICATION.php
(usually in the directory ../wp-content/plugins/wp-job-manager/templates)

<?php if ( $apply = get_the_job_application_method() ) :
 wp_enqueue_script( 'wp-job-manager-job-application' );
 ?>
 <div class="job_application application">
  <?php do_action( 'job_application_start', $apply ); ?>
  
  <!---------------------- ADD THIS SECTION -------------->
  <?php 
   if ( ! is_user_logged_in() ) {
      ?> 
    <p class="account-sign-in"><?php _e( 'You need to be signed in to apply for this job.', 'wp-job-manager' ); ?> 
    <a class="button" href="<?php echo apply_filters( 'job_manager_job_dashboard_login_url', wp_login_url( get_permalink() ) ); ?>">
    <?php _e( 'Sign in', 'wp-job-manager' ); ?>
    </a></p>
  <?php 
    
   } else {
    //show the form if the form has not been submitted.
    if ( ! isset($_POST['nb_app_submit']) ): {
  ?>
  
    <hr><br>
  <form action="<?php echo esc_url( $action ); ?>" method="post">
   <br>
   <p>Please use the area below to write your application.  
    Your application will be sent as a private message to the person who posted the job. </p>
   <textarea name="nb_app_note3" rows="8" cols="40" 
    placeholder="I would like to apply for..." required></textarea>  
   
   <input type="hidden" name="nb_app_rec" value="<?php echo get_user_by('email',$apply->raw_email)->ID; ?>">
   <input type="hidden" name="nb_app_jobtitle" value="<?php echo rawurlencode($apply->subject); ?>">
   <input type="submit" name="nb_app_submit" value="Apply Job" />
  </form>
  
  <?php
   } else:
    if ( $_POST['nb_app_submit'] == 'Apply Job')  {
     $msg_cont = $_POST['nb_app_note3'];
     if ($msg_cont == '') {$msg_cont = 'The sender did not write any message.';}
     $apply->app_note = $msg_cont;
     $confirm_msg = '<br>You application has been submitted.<br>';

     _e($confirm_msg);
    }
    else {
     _e('Error: No parameters to read.');
    }    
   
  ?>
  <!--
   when the APPLY JOB button is clicked, the form is submitted.
   The form comes back to the same page.
   At this point, check if the $_POST['submit'] == 'Apply Job'.
   If yes, then send the private msg.
   Else, show the same page which is the default situation.
  ->
  
  <?php
   endif;
   }
  ?>
  <!---------------------------- ADDITIONS - END --------------------->

  <!------ DISABLE THE NEXT LINE SO THAT THIS BUTTON DOES NOT SHOW ---->
  <!--input type="button" class="application_button button" 
      value="<?php //_e( 'Apply for job', 'wp-job-manager' ); ?>" /-->

<!--------- LEAVE THE REST OF THE CODE AS IS. --------------------->
  
  <div class="application_details">
   <?php
    /**
     * job_manager_application_details_email or job_manager_application_details_url hook
     */
    do_action( 'job_manager_application_details_' . $apply->type, $apply );
   ?>
  </div>
  <?php do_action( 'job_application_end', $apply ); ?>
 </div>
<?php endif; ?>

 

2. JOB-APPLICATION-EMAIL.PHP
(usually in the directory ../wp-content/plugins/wp-job-manager/templates)

Replace the contents of the file with the following.

<p>
 <?php
   $job_poster = get_user_by('email',$apply->raw_email)->user_login;
   $message = $apply->app_note;
   $msg_sub = $apply->subject;
   $msg_sub = substr($msg_sub,15);
   $args = array( 'recipients' => array($job_poster),
                  'subject' => $msg_sub,
                  'content' => $message
                );

   messages_new_message( $args );
 ?>
</p>