Untitled UI logotext
Solutions
WebsitesEcommerceMobile AppsWeb AppsProduction Support & Maintenance
Our work
Company
About usBlogPodcastContact us
Book a free consultation

Birchpress - How Do I Export Client Appointments?

Olivia Rhye

As of 2015, from what i've read on forums and the Birchpress documentation, you can't — as of a few minutes ago, i have at least something working!

This is just a PHP script that you can put in a hook or whatever – but in my scenario I'm just going to the URL example.com/services/exportAppointments.php

First we want to include wordpress functionality in our service: (mine's in a folder i made called "services", so i need to go up a directory to the be in the root, thus the '../')

<?php
include '../wp-load.php';
?>

We'll need two functions, one to find an appointment and one to find a client by an ID:

<?php
/***********************************
 Query Single Appointment Details
***********************************/
function getAppointment($postID){
 query_posts(array(
   'post_type' => 'birs_appointment',
   'p' => $postID
 ));  
 while (have_posts()) : the_post();
   $data = get_post_meta(get_the_ID());
 endwhile;
 wp_reset_query();
 return $data;
}
?>
<?php
/***********************************
 Query Single Client Details
***********************************/
function getClient($postID){
 query_posts(array(
   'post_type' => 'birs_client',
   'p' => $postID
 ));  
 while (have_posts()) : the_post();
   $data = get_post_meta(get_the_ID());
 endwhile;
 wp_reset_query();
 return $data;
}
?>

The post type that links these together is called "birs_appointment1on1", so getting a query of those (you can apply your own filters here) will give me the list of all the appointments, which from there I can get the relevant info of the various clients and appointments. There may be a more sleek way to do this so you don't re-query those, but this is just a quickie. (please note, i am using the client Zipcode as a zipcode for their private practice, and i create a custom field for their practice name, so there's an example of custom data in there too!)

<?php
/*****************************************
 Query the Various Appointments
*****************************************/
$birchpress_appointments = query_posts(array(
 'post_type' => 'birs_appointment1on1',
 'showposts' => -1
));
foreach($birchpress_appointments as $birchpress_appointment):
 $birchID = $birchpress_appointment->ID;
 $data = get_post_meta($birchID);

 //CLIENT
 $clientID = $data['_birs_client_id'][0];
 $client = getClient($clientID);
 //APPOINTMENT
 $appointmentID = $data['_birs_appointment_id'][0];
 $appointment = getAppointment($appointmentID);
endforeach;
?>

So, let's put it all together and export the data as a csv – hopefully this provides a good starting point for anyone that wants to take the last query and apply meta filters to the _birs_appointment_id and _birs_client_id fields

<?php
include '../wp-load.php';

//OUTPUT HEADERS - makes browser download a CSV
header('Content-type: text/csv');
header('Content-Disposition: attachment; filename="appointments.csv"');
header('Pragma: no-cache');
header('Expires: 0');
$file = fopen('php://output', 'w');

// COLUMN HEADERS
fputcsv($file, array(
 'First Name',
 'Last Name',
 'Email',
 'Phone',
 'Practice Name',
 'Practice Zip',
 "Appointment"
));
$csvdata = array();

/*****************************************
 Query the Various Appointments
*****************************************/
$birchpress_appointments = query_posts(array(
 'post_type' => 'birs_appointment1on1', //birs_appointment
 'showposts' => -1
));
foreach($birchpress_appointments as $birchpress_appointment):
 $birchID = $birchpress_appointment->ID;
 $data = get_post_meta($birchID);

 //CLIENT DATA
 $clientID = $data['_birs_client_id'][0];
 $client = getClient($clientID);
 $fname = $client['_birs_client_name_first'][0];
 $lname = $client['_birs_client_name_last'][0];
 $email = $client['_birs_client_email'][0];
 $phone = $client['_birs_client_phone'][0];
 $practiceName = $client['_birs_field_6'][0];
 $practiceZip = $client['_birs_client_zip'][0];

 //APPOINTMENT DATA
 $appointmentID = $data['_birs_appointment_id'][0];
 $appointment = getAppointment($appointmentID);
 $timestamp = $appointment['_birs_appointment_timestamp'][0];
 
 // COLUMN ROWS -- match COLUMN HEADERS array structure
 $csvdata[] = array(
   $fname,
   $lname,
   $email,
   $phone,
   $practiceName,
   $practiceZip,
   date('Y-m-d H:i:s', $timestamp)
 );

endforeach;
wp_reset_query();

// output each row of the data
foreach ($csvdata as $row){
 fputcsv($file, $row);
}
exit();


/***********************************
 Query Single Appointment Details
***********************************/
function getAppointment($postID){
 query_posts(array(
   'post_type' => 'birs_appointment',
   'p' => $postID
 ));  
 while (have_posts()) : the_post();
   $data = get_post_meta(get_the_ID());
 endwhile;
 wp_reset_query();
 return $data;
}


/***********************************
 Query Single Client Details
***********************************/
function getClient($postID){
 query_posts(array(
   'post_type' => 'birs_client',
   'p' => $postID
 ));  
 while (have_posts()) : the_post();
   $data = get_post_meta(get_the_ID());
 endwhile;
 wp_reset_query();
 return $data;
}

?>

Ready to start a project?

Book a free consultation
Untitled UI logotext
Our work
About us
Blog
Careers
Submit a ticket
Agency Partnerships
Contact
© 2024 fjorge. All rights reserved.
Privacy