static function show_staff_directory($param = null, $template = NULL)
 {
     parse_str($param);
     global $wpdb;
     // make sure we aren't calling both id and cat at the same time
     if (isset($id) && $id != '' && isset($cat) && $cat != '') {
         return "<strong>ERROR: You cannot set both a single ID and a category ID for your Staff Directory</strong>";
     }
     $query_args = array('post_type' => 'staff', 'posts_per_page' => -1);
     // check if it's a single staff member first, since single members won't be ordered
     if (isset($id) && $id != '' && (!isset($cat) || $cat == '')) {
         $query_args['p'] = $id;
     }
     // ends single staff
     // check if we're returning a staff category
     if (isset($cat) && $cat != '' && (!isset($id) || $id == '')) {
         $query_args['tax_query'] = array(array('taxonomy' => 'staff_category', 'terms' => array($cat)));
     }
     if (isset($orderby) && $orderby != '') {
         $query_args['orderby'] = $orderby;
     }
     if (isset($order) && $order != '') {
         $query_args['order'] = $order;
     }
     $staff_query = new WP_Query($query_args);
     switch ($template) {
         case 'list':
             $output = StaffDirectoryShortcode::html_for_list_template($staff_query);
             break;
         case 'grid':
             $output = StaffDirectoryShortcode::html_for_grid_template($staff_query);
             break;
         case 'category':
             $output = StaffDirectoryShortcode::html_for_category_template($query_args);
             break;
         default:
             $output = StaffDirectoryShortcode::html_for_custom_template($template, $staff_query);
             break;
     }
     wp_reset_query();
     return $output;
 }
<?php

/*
Plugin Name: Staff Directory
Plugin URI: https://wordpress.org/plugins/staff-directory/
Description: Allows Wordpress to keep track of your staff directory for your website. Good for churches, small companies, etc.
Version: 1.0.1
Author: Adam Tootle
Author URI: http://www.adamtootle.com
*/
global $wpdb;
$staff_directory_table = $wpdb->prefix . 'staff_directory';
define('STAFF_DIRECTORY_TABLE', $wpdb->prefix . 'staff_directory');
define('STAFF_TEMPLATES', $wpdb->prefix . 'staff_directory_templates');
define('STAFF_PHOTOS_DIRECTORY', WP_CONTENT_DIR . "/uploads/staff-photos/");
require_once dirname(__FILE__) . '/classes/staff_settings.php';
StaffSettings::setupDefaults();
require_once dirname(__FILE__) . '/classes/staff_directory.php';
require_once dirname(__FILE__) . '/classes/staff_directory_shortcode.php';
require_once dirname(__FILE__) . '/classes/staff_directory_admin.php';
StaffDirectory::register_post_types();
StaffDirectory::set_default_meta_fields_if_necessary();
StaffDirectoryAdmin::register_admin_menu_items();
StaffDirectoryShortcode::register_shortcode();
if (StaffDirectory::show_import_message()) {
    StaffDirectoryAdmin::register_import_old_staff_message();
}
register_activation_hook(__FILE__, array('StaffDirectory', 'set_default_templates_if_necessary'));