/** * output_jobs function. * * @access public * @param mixed $args * @return void */ public function output_jobs($atts) { ob_start(); extract($atts = shortcode_atts(apply_filters('job_manager_output_jobs_defaults', array('per_page' => get_option('job_manager_per_page'), 'orderby' => 'featured', 'order' => 'DESC', 'show_filters' => true, 'show_categories' => true, 'show_category_multiselect' => get_option('job_manager_enable_default_category_multiselect', false), 'show_pagination' => false, 'show_more' => true, 'categories' => '', 'job_types' => '', 'featured' => null, 'filled' => null, 'location' => '', 'keywords' => '', 'selected_category' => '', 'selected_job_types' => implode(',', array_values(get_job_listing_types('id=>slug'))))), $atts)); if (!get_option('job_manager_enable_categories')) { $show_categories = false; } // String and bool handling $show_filters = $this->string_to_bool($show_filters); $show_categories = $this->string_to_bool($show_categories); $show_category_multiselect = $this->string_to_bool($show_category_multiselect); $show_more = $this->string_to_bool($show_more); $show_pagination = $this->string_to_bool($show_pagination); if (!is_null($featured)) { $featured = is_bool($featured) && $featured || in_array($featured, array('1', 'true', 'yes')) ? true : false; } if (!is_null($filled)) { $filled = is_bool($filled) && $filled || in_array($filled, array('1', 'true', 'yes')) ? true : false; } // Array handling $categories = is_array($categories) ? $categories : array_filter(array_map('trim', explode(',', $categories))); $job_types = is_array($job_types) ? $job_types : array_filter(array_map('trim', explode(',', $job_types))); $selected_job_types = is_array($selected_job_types) ? $selected_job_types : array_filter(array_map('trim', explode(',', $selected_job_types))); // Get keywords and location from querystring if set if (!empty($_GET['search_keywords'])) { $keywords = sanitize_text_field($_GET['search_keywords']); } if (!empty($_GET['search_location'])) { $location = sanitize_text_field($_GET['search_location']); } if (!empty($_GET['search_category'])) { $selected_category = sanitize_text_field($_GET['search_category']); } if ($show_filters) { get_job_manager_template('job-filters.php', array('per_page' => $per_page, 'orderby' => $orderby, 'order' => $order, 'show_categories' => $show_categories, 'categories' => $categories, 'selected_category' => $selected_category, 'job_types' => $job_types, 'atts' => $atts, 'location' => $location, 'keywords' => $keywords, 'selected_job_types' => $selected_job_types, 'show_category_multiselect' => $show_category_multiselect)); get_job_manager_template('job-listings-start.php'); get_job_manager_template('job-listings-end.php'); if (!$show_pagination && $show_more) { echo '<a class="load_more_jobs" href="#" style="display:none;"><strong>' . __('Load more listings', 'wp-job-manager') . '</strong></a>'; } } else { $jobs = get_job_listings(apply_filters('job_manager_output_jobs_args', array('search_location' => $location, 'search_keywords' => $keywords, 'search_categories' => $categories, 'job_types' => $job_types, 'orderby' => $orderby, 'order' => $order, 'posts_per_page' => $per_page, 'featured' => $featured, 'filled' => $filled))); if ($jobs->have_posts()) { ?> <?php get_job_manager_template('job-listings-start.php'); ?> <?php while ($jobs->have_posts()) { $jobs->the_post(); ?> <?php get_job_manager_template_part('content', 'job_listing'); ?> <?php } ?> <?php get_job_manager_template('job-listings-end.php'); ?> <?php if ($jobs->found_posts > $per_page && $show_more) { ?> <?php wp_enqueue_script('wp-job-manager-ajax-filters'); ?> <?php if ($show_pagination) { ?> <?php echo get_job_listing_pagination($jobs->max_num_pages); ?> <?php } else { ?> <a class="load_more_jobs" href="#"><strong><?php _e('Load more listings', 'wp-job-manager'); ?> </strong></a> <?php } ?> <?php } ?> <?php } else { do_action('job_manager_output_jobs_no_results'); } wp_reset_postdata(); } $data_attributes_string = ''; $data_attributes = array('location' => $location, 'keywords' => $keywords, 'show_filters' => $show_filters ? 'true' : 'false', 'show_pagination' => $show_pagination ? 'true' : 'false', 'per_page' => $per_page, 'orderby' => $orderby, 'order' => $order, 'categories' => implode(',', $categories)); if (!is_null($featured)) { $data_attributes['featured'] = $featured ? 'true' : 'false'; } if (!is_null($filled)) { $data_attributes['filled'] = $filled ? 'true' : 'false'; } foreach ($data_attributes as $key => $value) { $data_attributes_string .= 'data-' . esc_attr($key) . '="' . esc_attr($value) . '" '; } $job_listings_output = apply_filters('job_manager_job_listings_output', ob_get_clean()); return '<div class="job_listings" ' . $data_attributes_string . '>' . $job_listings_output . '</div>'; }
function dln_job_types() { $options = array(); $terms = get_job_listing_types(); foreach ($terms as $term) { $options[$term->slug] = $term->name; } return $options; }
/** * Shows links after filtering jobs */ function job_manager_get_filtered_links($args = array()) { $job_categories = array(); $types = get_job_listing_types(); // Convert to slugs if ($args['search_categories']) { foreach ($args['search_categories'] as $category) { if (is_numeric($category)) { $category_object = get_term_by('id', $category, 'job_listing_category'); if (!is_wp_error($category_object)) { $job_categories[] = $category_object->slug; } } else { $job_categories[] = $category; } } } $links = apply_filters('job_manager_job_filters_showing_jobs_links', array('reset' => array('name' => __('Reset', 'wp-job-manager'), 'url' => '#'), 'rss_link' => array('name' => __('RSS', 'wp-job-manager'), 'url' => get_job_listing_rss_link(apply_filters('job_manager_get_listings_custom_filter_rss_args', array('job_types' => isset($args['filter_job_types']) ? implode(',', $args['filter_job_types']) : '', 'search_location' => $args['search_location'], 'job_categories' => implode(',', $job_categories), 'search_keywords' => $args['search_keywords']))))), $args); if (sizeof($args['filter_job_types']) === sizeof($types) && !$args['search_keywords'] && !$args['search_location'] && !$args['search_categories'] && !apply_filters('job_manager_get_listings_custom_filter', false)) { unset($links['reset']); } $return = ''; foreach ($links as $key => $link) { $return .= '<a href="' . esc_url($link['url']) . '" class="' . esc_attr($key) . '">' . $link['name'] . '</a>'; } return $return; }
/** * Get listings via ajax */ public function get_listings() { global $wp_post_types; $result = array(); $search_location = sanitize_text_field(stripslashes($_REQUEST['search_location'])); $search_keywords = sanitize_text_field(stripslashes($_REQUEST['search_keywords'])); $search_categories = isset($_REQUEST['search_categories']) ? $_REQUEST['search_categories'] : ''; $filter_job_types = isset($_REQUEST['filter_job_type']) ? array_filter(array_map('sanitize_title', (array) $_REQUEST['filter_job_type'])) : null; $types = get_job_listing_types(); $post_type_label = $wp_post_types['job_listing']->labels->name; $orderby = sanitize_text_field($_REQUEST['orderby']); if (is_array($search_categories)) { $search_categories = array_filter(array_map('sanitize_text_field', array_map('stripslashes', $search_categories))); } else { $search_categories = array_filter(array(sanitize_text_field(stripslashes($search_categories)))); } $args = array('search_location' => $search_location, 'search_keywords' => $search_keywords, 'search_categories' => $search_categories, 'job_types' => is_null($filter_job_types) || sizeof($types) === sizeof($filter_job_types) ? '' : $filter_job_types + array(0), 'orderby' => $orderby, 'order' => sanitize_text_field($_REQUEST['order']), 'offset' => (absint($_REQUEST['page']) - 1) * absint($_REQUEST['per_page']), 'posts_per_page' => absint($_REQUEST['per_page'])); if (isset($_REQUEST['filled']) && ($_REQUEST['filled'] === 'true' || $_REQUEST['filled'] === 'false')) { $args['filled'] = $_REQUEST['filled'] === 'true' ? true : false; } if (isset($_REQUEST['featured']) && ($_REQUEST['featured'] === 'true' || $_REQUEST['featured'] === 'false')) { $args['featured'] = $_REQUEST['featured'] === 'true' ? true : false; $args['orderby'] = 'featured' === $orderby ? 'date' : $orderby; } ob_start(); $jobs = get_job_listings(apply_filters('job_manager_get_listings_args', $args)); $result['found_jobs'] = false; if ($jobs->have_posts()) { $result['found_jobs'] = true; ?> <?php while ($jobs->have_posts()) { $jobs->the_post(); ?> <?php get_job_manager_template_part('content', 'job_listing'); ?> <?php } ?> <?php } else { ?> <?php get_job_manager_template_part('content', 'no-jobs-found'); ?> <?php } $result['html'] = ob_get_clean(); $result['showing'] = array(); // Generate 'showing' text $showing_types = array(); $unmatched = false; foreach ($types as $type) { if (is_array($filter_job_types) && in_array($type->slug, $filter_job_types)) { $showing_types[] = $type->name; } else { $unmatched = true; } } if (sizeof($showing_types) == 1) { $result['showing'][] = implode(', ', $showing_types); } elseif ($unmatched && $showing_types) { $last_type = array_pop($showing_types); $result['showing'][] = implode(', ', $showing_types) . " & {$last_type}"; } if ($search_categories) { $showing_categories = array(); foreach ($search_categories as $category) { $category_object = get_term_by(is_numeric($category) ? 'id' : 'slug', $category, 'job_listing_category'); if (!is_wp_error($category_object)) { $showing_categories[] = $category_object->name; } } $result['showing'][] = implode(', ', $showing_categories); } if ($search_keywords) { $result['showing'][] = '“' . $search_keywords . '”'; } $result['showing'][] = $post_type_label; if ($search_location) { $result['showing'][] = sprintf(__('located in “%s”', 'wp-job-manager'), $search_location); } if (1 === sizeof($result['showing'])) { $result['showing_all'] = true; } $result['showing'] = apply_filters('job_manager_get_listings_custom_filter_text', sprintf(__('Showing all %s', 'wp-job-manager'), implode(' ', $result['showing']))); // Generate RSS link $result['showing_links'] = job_manager_get_filtered_links(array('filter_job_types' => $filter_job_types, 'search_location' => $search_location, 'search_categories' => $search_categories, 'search_keywords' => $search_keywords)); // Generate pagination if (isset($_REQUEST['show_pagination']) && $_REQUEST['show_pagination'] === 'true') { $result['pagination'] = get_job_listing_pagination($jobs->max_num_pages, absint($_REQUEST['page'])); } $result['max_num_pages'] = $jobs->max_num_pages; wp_send_json(apply_filters('job_manager_get_listings_result', $result, $jobs)); }
</div> <?php } ?> <?php do_action('job_manager_job_filters_search_jobs_end', $atts); ?> </div> <?php if (!is_tax('job_listing_type') && empty($job_types)) { ?> <ul class="job_types"> <?php foreach (get_job_listing_types() as $type) { ?> <li><label for="job_type_<?php echo $type->slug; ?> " class="<?php echo sanitize_title($type->name); ?> "><input type="checkbox" name="filter_job_type[]" value="<?php echo $type->slug; ?> " <?php checked(1, 1); ?> id="job_type_<?php echo $type->slug;
/** * Get listings via ajax */ public function get_listings() { global $job_manager, $wpdb; $result = array(); $search_location = sanitize_text_field(stripslashes($_POST['search_location'])); $search_keywords = sanitize_text_field(stripslashes($_POST['search_keywords'])); $search_categories = isset($_POST['search_categories']) ? $_POST['search_categories'] : ''; $filter_job_types = isset($_POST['filter_job_type']) ? array_filter(array_map('sanitize_title', (array) $_POST['filter_job_type'])) : null; if (is_array($search_categories)) { $search_categories = array_filter(array_map('sanitize_text_field', array_map('stripslashes', $search_categories))); } else { $search_categories = array_filter(array(sanitize_text_field(stripslashes($search_categories)))); } $args = array('search_location' => $search_location, 'search_keywords' => $search_keywords, 'search_categories' => $search_categories, 'job_types' => is_null($filter_job_types) ? '' : $filter_job_types + array(0), 'orderby' => sanitize_text_field($_POST['orderby']), 'order' => sanitize_text_field($_POST['order']), 'offset' => (absint($_POST['page']) - 1) * absint($_POST['per_page']), 'posts_per_page' => absint($_POST['per_page']), 'show_featured_only' => isset($_POST['show_featured_only']) ? absint($_POST['show_featured_only']) : 0); $jobs = get_job_listings(apply_filters('job_manager_get_listings_args', $args)); $result['found_jobs'] = false; ob_start(); if ($jobs->have_posts()) { $result['found_jobs'] = true; ?> <?php while ($jobs->have_posts()) { $jobs->the_post(); ?> <?php get_job_manager_template_part('content', 'job_listing'); ?> <?php } ?> <?php } else { ?> <?php get_job_manager_template_part('content', 'no-jobs-found'); ?> <?php } $result['html'] = ob_get_clean(); // Generate 'showing' text $types = get_job_listing_types(); if (sizeof($filter_job_types) > 0 && (sizeof($filter_job_types) !== sizeof($types) || $search_keywords || $search_location || $search_categories || apply_filters('job_manager_get_listings_custom_filter', false))) { $showing_types = array(); $unmatched = false; foreach ($types as $type) { if (in_array($type->slug, $filter_job_types)) { $showing_types[] = $type->name; } else { $unmatched = true; } } if (!$unmatched) { $showing_types = ''; } elseif (sizeof($showing_types) == 1) { $showing_types = implode(', ', $showing_types) . ' '; } else { $last = array_pop($showing_types); $showing_types = implode(', ', $showing_types); $showing_types .= " & {$last} "; } $showing_categories = array(); if ($search_categories) { foreach ($search_categories as $category) { if (!is_numeric($category)) { $category_object = get_term_by('slug', $category, 'job_listing_category'); } if (is_numeric($category) || is_wp_error($category_object) || !$category_object) { $category_object = get_term_by('id', $category, 'job_listing_category'); } if (!is_wp_error($category_object)) { $showing_categories[] = $category_object->name; } } } if ($search_keywords) { $showing_jobs = sprintf(__('Showing %s“%s” %sjobs', 'wp-job-manager'), $showing_types, $search_keywords, implode(', ', $showing_categories)); } else { $showing_jobs = sprintf(__('Showing all %s%sjobs', 'wp-job-manager'), $showing_types, implode(', ', $showing_categories) . ' '); } $showing_location = $search_location ? sprintf(' ' . __('located in “%s”', 'wp-job-manager'), $search_location) : ''; $result['showing'] = apply_filters('job_manager_get_listings_custom_filter_text', $showing_jobs . $showing_location); } else { $result['showing'] = ''; } // Generate RSS link $result['showing_links'] = job_manager_get_filtered_links(array('filter_job_types' => $filter_job_types, 'search_location' => $search_location, 'search_categories' => $search_categories, 'search_keywords' => $search_keywords)); $result['max_num_pages'] = $jobs->max_num_pages; echo '<!--WPJM-->'; echo json_encode(apply_filters('job_manager_get_listings_result', $result)); echo '<!--WPJM_END-->'; die; }
</fieldset> <?php } ?> <fieldset> <label for="alert_job_type"><?php _e('Job Type', 'wp-job-manager-alerts'); ?> </label> <div class="field"> <select name="alert_job_type[]" data-placeholder="<?php _e('Any job type', 'wp-job-manager-alerts'); ?> " id="alert_job_type" multiple="multiple" class="job-manager-chosen-select"> <?php $terms = get_job_listing_types(); foreach ($terms as $term) { echo '<option value="' . esc_attr($term->slug) . '" ' . selected(in_array($term->slug, $alert_job_type), true, false) . '>' . esc_html($term->name) . '</option>'; } ?> </select> </div> </fieldset> <fieldset> <label for="alert_frequency"><?php _e('Email Frequency', 'wp-job-manager-alerts'); ?> </label> <div class="field"> <select name="alert_frequency" id="alert_frequency"> <option value="daily" <?php