ÿØÿà JFIF ÿÛ „ ( %"1!%)+...383,7(-.+ -+++--++++---+-+-----+---------------+---+-++7-----ÿÀ ß â" ÿÄ ÿÄ H !1AQaq"‘¡2B±ÁÑð#R“Ò Tbr‚²á3csƒ’ÂñDS¢³$CÿÄ ÿÄ % !1AQa"23‘ÿÚ ? ôÿ ¨pŸªáÿ —åYõõ\?àÒü©ŠÄï¨pŸªáÿ —åYõõ\?àÓü©ŠÄá 0Ÿªáÿ Ÿå[úƒ ú®ði~TÁbqÐ8OÕpÿ ƒOò¤Oè`–RÂáœá™êi€ßÉ< FtŸI“öÌ8úDf´°å}“¾œ6 öFá°y¥jñÇh†ˆ¢ã/ÃÐ:ªcÈ "Y¡ðÑl>ÿ ”ÏËte:qž\oäŠe÷ó²·˜HT4&ÿ ÓÐü6ö®¿øþßèô Ÿ•7Ñi’•j|“ñì>b…þS?*Óôÿ ÓÐü*h¥£ír¶ü UãS炟[AÐaè[ûª•õ&õj?†Éö+EzP—WeÒírJFt ‘BŒ†Ï‡%#tE Øz ¥OÛ«!1›üä±Í™%ºÍãö]°î(–:@<‹ŒÊö×òÆt¦ãº+‡¦%Ìòh´OƒJŒtMÜ>ÀÜÊw3Y´•牋4ÇýÊTì>œú=Íwhyë,¾Ôò×õ¿ßÊa»«þˆÑªQ|%6ž™A õ%:øj<>É—ÿ Å_ˆCbõ¥š±ý¯Ýƒï…¶|RëócÍf溪“t.СøTÿ *Ä¿-{†çàczůŽ_–^XþŒ±miB[X±d 1,é”zEù»& î9gœf™9Ð'.;—™i}!ôšåîqêÛ٤ёý£½ÆA–àôe"A$ËÚsäÿ ÷Û #°xŸëí(l »ý3—¥5m! rt`†0~'j2(]S¦¦kv,ÚÇl¦øJA£Šƒ J3E8ÙiŽ:cÉžúeZ°€¯\®kÖ(79«Ž:¯X”¾³Š&¡* ….‰Ž(ÜíŸ2¥ª‡×Hi²TF¤ò[¨íÈRëÉä¢mgÑ.Ÿ<öäS0í„ǹÁU´f#Vß;Õ–…P@3ío<ä-±»Ž.L|kªÀê›fÂ6@»eu‚|ÓaÞÆŸ…¨ááå>åŠ?cKü6ùTÍÆ”†sĤÚ;H2RÚ†õ\Ö·Ÿn'¾ ñ#ºI¤Å´%çÁ‚â7›‹qT3Iï¨ÖÚ5I7Ë!ÅOóŸ¶øÝñØôת¦$Tcö‘[«Ö³šÒ';Aþ ¸èíg A2Z"i¸vdÄ÷.iõ®§)¿]¤À†–‡É&ä{V¶iŽ”.Ó×Õÿ û?h¬Mt–íª[ÿ Ñÿ ÌV(í}=ibÔ¡›¥¢±b Lô¥‡piη_Z<‡z§èŒ)iÖwiÇ 2hÙ3·=’d÷8éŽ1¦¸c¤µ€7›7Ø ð\á)} ¹fËí›pAÃL%âc2 í§æQz¿;T8sæ°qø)QFMð‰XŒÂ±N¢aF¨…8¯!U Z©RÊ ÖPVÄÀÍin™Ì-GˆªÅËŠ›•zË}º±ŽÍFò¹}Uw×#ä5B¤{î}Ð<ÙD é©¤&‡ïDbàÁôMÁ.forms->get_form( 'submit-job', $atts ); } /** * Handles shortcode which lists the logged in user's jobs. * * @deprecated 2.3.0 - Moved to Job_Dashboard_Shortcode. * * @param array $atts * @return string */ public function job_dashboard( $atts ) { _deprecated_function( __METHOD__, '2.3.0', 'Job_Dashboard_Shortcode::output_job_dashboard_shortcode' ); return Job_Dashboard_Shortcode::instance()->output_job_dashboard( $atts ); } /** * Get the actions available to the user for a job listing on the job dashboard page. * * @deprecated 2.3.0 - Moved to Job_Dashboard_Shortcode. * * @param WP_Post $job The job post object. * * @return array */ public function get_job_actions( $job ) { _deprecated_function( __METHOD__, '2.3.0', 'Job_Dashboard_Shortcode::get_job_actions' ); return Job_Dashboard_Shortcode::instance()->get_job_actions( $job ); } /** * Filters the url from paginate_links to avoid multiple calls for same action in job dashboard * * @deprecated 2.3.0 - Moved to Job_Dashboard_Shortcode. * * @param string $link * @return string */ public function filter_paginate_links( $link ) { _deprecated_function( __METHOD__, '2.3.0', 'Job_Dashboard_Shortcode::filter_paginate_links' ); return Job_Dashboard_Shortcode::instance()->filter_paginate_links( $link ); } /** * Displays edit job form. * * @deprecated 2.3.0 - Moved to Job_Dashboard_Shortcode. */ public function edit_job() { _deprecated_function( __METHOD__, '2.3.0', 'Job_Dashboard_Shortcode::edit_job' ); Job_Dashboard_Shortcode::instance()->edit_job(); } /** * Lists all job listings. * * @param array $atts * @return string */ public function output_jobs( $atts ) { ob_start(); if ( ! job_manager_user_can_browse_job_listings() ) { get_job_manager_template_part( 'access-denied', 'browse-job_listings' ); return ob_get_clean(); } $atts = shortcode_atts( apply_filters( 'job_manager_output_jobs_defaults', [ 'per_page' => get_option( 'job_manager_per_page' ), 'orderby' => 'featured', 'order' => 'DESC', // Filters + cats. 'show_filters' => true, 'show_categories' => true, 'show_category_multiselect' => get_option( 'job_manager_enable_default_category_multiselect', false ), 'show_pagination' => 'pagination' === get_option( 'job_manager_job_listing_pagination_type' ) ? true : false, 'show_more' => 'load_more' === get_option( 'job_manager_job_listing_pagination_type' ) ? true : false, // Limit what jobs are shown based on category, post status, and type. 'categories' => '', 'job_types' => '', 'post_status' => '', 'featured' => null, // True to show only featured, false to hide featured, leave null to show both. 'filled' => null, // True to show only filled, false to hide filled, leave null to show both/use the settings. 'remote_position' => null, // True to show only remote, false to hide remote, leave null to show both. 'featured_first' => false, // True to show featured first, false to show in default order. // Default values for filters. 'location' => '', 'keywords' => '', 'selected_category' => '', 'selected_job_types' => implode( ',', array_values( get_job_listing_types( 'id=>slug' ) ) ), ] ), $atts ); if ( ! get_option( 'job_manager_enable_categories' ) ) { $atts['show_categories'] = false; } // String and bool handling. $atts['show_filters'] = $this->string_to_bool( $atts['show_filters'] ); $atts['show_categories'] = $this->string_to_bool( $atts['show_categories'] ); $atts['show_category_multiselect'] = $this->string_to_bool( $atts['show_category_multiselect'] ); $atts['show_more'] = $this->string_to_bool( $atts['show_more'] ); $atts['show_pagination'] = $this->string_to_bool( $atts['show_pagination'] ); $atts['featured_first'] = $this->string_to_bool( $atts['featured_first'] ); if ( ! is_null( $atts['featured'] ) ) { $atts['featured'] = ( is_bool( $atts['featured'] ) && $atts['featured'] ) || in_array( $atts['featured'], [ 1, '1', 'true', 'yes' ], true ); } if ( ! is_null( $atts['filled'] ) ) { $atts['filled'] = ( is_bool( $atts['filled'] ) && $atts['filled'] ) || in_array( $atts['filled'], [ 1, '1', 'true', 'yes' ], true ); } if ( ! is_null( $atts['remote_position'] ) ) { $atts['remote_position'] = ( is_bool( $atts['remote_position'] ) && $atts['remote_position'] ) || in_array( $atts['remote_position'], [ 1, '1', 'true', 'yes' ], true ); } // By default, use client-side state to populate form fields. $disable_client_state = false; // Get keywords, location, category and type from querystring if set. // phpcs:disable WordPress.Security.NonceVerification.Recommended -- Input is used safely. if ( ! empty( $_GET['search_keywords'] ) ) { $atts['keywords'] = sanitize_text_field( wp_unslash( $_GET['search_keywords'] ) ); $disable_client_state = true; } if ( ! empty( $_GET['search_location'] ) ) { $atts['location'] = sanitize_text_field( wp_unslash( $_GET['search_location'] ) ); $disable_client_state = true; } if ( ! empty( $_GET['search_category'] ) ) { $atts['selected_category'] = sanitize_text_field( wp_unslash( $_GET['search_category'] ) ); $disable_client_state = true; } if ( ! empty( $_GET['search_job_type'] ) ) { $atts['selected_job_types'] = sanitize_text_field( wp_unslash( $_GET['search_job_type'] ) ); $disable_client_state = true; } // phpcs:enable WordPress.Security.NonceVerification.Recommended // Array handling. $atts['categories'] = is_array( $atts['categories'] ) ? $atts['categories'] : array_filter( array_map( 'trim', explode( ',', $atts['categories'] ) ) ); $atts['selected_category'] = is_array( $atts['selected_category'] ) ? $atts['selected_category'] : array_filter( array_map( 'trim', explode( ',', $atts['selected_category'] ) ) ); $atts['job_types'] = is_array( $atts['job_types'] ) ? $atts['job_types'] : array_filter( array_map( 'trim', explode( ',', $atts['job_types'] ) ) ); $atts['post_status'] = is_array( $atts['post_status'] ) ? $atts['post_status'] : array_filter( array_map( 'trim', explode( ',', $atts['post_status'] ) ) ); $atts['selected_job_types'] = is_array( $atts['selected_job_types'] ) ? $atts['selected_job_types'] : array_filter( array_map( 'trim', explode( ',', $atts['selected_job_types'] ) ) ); // Normalize field for categories. if ( ! empty( $atts['selected_category'] ) ) { foreach ( $atts['selected_category'] as $cat_index => $category ) { if ( ! is_numeric( $category ) ) { $term = get_term_by( 'slug', $category, \WP_Job_Manager_Post_Types::TAX_LISTING_CATEGORY ); if ( $term ) { $atts['selected_category'][ $cat_index ] = $term->term_id; } } } } $data_attributes = [ 'location' => $atts['location'], 'keywords' => $atts['keywords'], 'show_filters' => $atts['show_filters'] ? 'true' : 'false', 'show_pagination' => $atts['show_pagination'] ? 'true' : 'false', 'per_page' => $atts['per_page'], 'orderby' => $atts['orderby'], 'order' => $atts['order'], 'categories' => implode( ',', $atts['categories'] ), 'disable-form-state-storage' => $disable_client_state, 'featured_first' => $atts['featured_first'] ? 'true' : 'false', ]; if ( $atts['show_filters'] ) { get_job_manager_template( 'job-filters.php', [ 'per_page' => $atts['per_page'], 'orderby' => $atts['orderby'], 'order' => $atts['order'], 'show_categories' => $atts['show_categories'], 'categories' => $atts['categories'], 'selected_category' => $atts['selected_category'], 'job_types' => $atts['job_types'], 'atts' => $atts, 'location' => $atts['location'], 'remote_position' => $atts['remote_position'], 'keywords' => $atts['keywords'], 'selected_job_types' => $atts['selected_job_types'], 'show_category_multiselect' => $atts['show_category_multiselect'], ] ); get_job_manager_template( 'job-listings-start.php' ); get_job_manager_template( 'job-listings-end.php' ); if ( ! $atts['show_pagination'] && $atts['show_more'] ) { echo '' . esc_html__( 'Load more listings', 'wp-job-manager' ) . ''; } } } else { do_action( 'job_manager_output_jobs_no_results' ); } wp_reset_postdata(); } $data_attributes_string = ''; if ( ! is_null( $atts['featured'] ) ) { $data_attributes['featured'] = $atts['featured'] ? 'true' : 'false'; } if ( ! is_null( $atts['filled'] ) ) { $data_attributes['filled'] = $atts['filled'] ? 'true' : 'false'; } if ( ! is_null( $atts['remote_position'] ) ) { $data_attributes['remote_position'] = $atts['remote_position'] ? 'true' : 'false'; } if ( ! empty( $atts['post_status'] ) ) { $data_attributes['post_status'] = implode( ',', $atts['post_status'] ); } $data_attributes['post_id'] = isset( $GLOBALS['post'] ) ? $GLOBALS['post']->ID : 0; /** * Pass additional data to the job listings
'; } } else { $jobs = get_job_listings( apply_filters( 'job_manager_output_jobs_args', [ 'search_location' => $atts['location'], 'search_keywords' => $atts['keywords'], 'post_status' => $atts['post_status'], 'search_categories' => $atts['categories'], 'job_types' => $atts['job_types'], 'orderby' => $atts['orderby'], 'order' => $atts['order'], 'posts_per_page' => $atts['per_page'], 'featured' => $atts['featured'], 'filled' => $atts['filled'], 'remote_position' => $atts['remote_position'], 'featured_first' => $atts['featured_first'], ] ) ); if ( ! empty( $atts['job_types'] ) ) { $data_attributes['job_types'] = implode( ',', $atts['job_types'] ); } if ( $jobs->have_posts() ) { get_job_manager_template( 'job-listings-start.php' ); while ( $jobs->have_posts() ) { $jobs->the_post(); get_job_manager_template_part( 'content', \WP_Job_Manager_Post_Types::PT_LISTING ); } get_job_manager_template( 'job-listings-end.php' ); if ( $jobs->found_posts > $atts['per_page'] && $atts['show_more'] ) { wp_enqueue_script( 'wp-job-manager-ajax-filters' ); if ( $atts['show_pagination'] ) { // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Template output. echo get_job_listing_pagination( $jobs->max_num_pages ); } else { echo '