diff --git a/environments/jobs/bin/after-start.sh b/environments/jobs/bin/after-start.sh index 832eac0891..5aa6bc9bfc 100755 --- a/environments/jobs/bin/after-start.sh +++ b/environments/jobs/bin/after-start.sh @@ -39,6 +39,7 @@ create_page_if_missing() { } create_page_if_missing 'post-a-job' 'Post a Job' create_page_if_missing 'remove-a-job' 'Remove a Job' +create_page_if_missing 'feedback' 'Feedback' '

We are sorry, but we do not have any additional information about job postings other than what was posted to the site.

If you are writing about your already-submitted job posting, please be sure to provide the email address you specified when you filled out the job form.

' create_page_if_missing 'faq' 'FAQ' '

General

What is this site?
This is a job board for WordPress-related jobs. Anyone can post a job opening or browse available positions.
How long do job postings stay up?
Job postings remain active for 21 days from the date of approval, after which they are automatically removed.
How much does it cost to post a job?
Posting a job is completely free.

For Employers

What kinds of jobs can I post?
Any job that is directly related to WordPress. This includes development, design, support, writing, translation, and more.
What is NOT acceptable for a job posting?
Jobs that are not related to WordPress, jobs that require payment from applicants, and jobs offering illegally low compensation are not acceptable.
How do I remove my job posting?
When you submit a job, you receive a job token. Use that token on the Remove a Job page to remove your listing at any time.
' # Create job categories. @@ -74,21 +75,21 @@ else JOB1=$($WP wp post create --post_type=job --post_status=publish \ --post_title='Senior WordPress Developer' \ --post_content='We are looking for an experienced WordPress developer to join our team. You will be responsible for building custom plugins and themes.' \ - '--meta_input={"jobtype":"ft","location":"Remote","company":"Starter Corp"}' \ + '--meta_input={"jobtype":"ft","location":"Remote","company":"Starter Corp","howtoapply":"https://example.com/apply","howtoapply_method":"web"}' \ --porcelain 2>/dev/null) && echo " Created job: Senior WordPress Developer" || true [ -n "$JOB1" ] && $WP wp post term set "$JOB1" job_category development > /dev/null 2>&1 JOB2=$($WP wp post create --post_type=job --post_status=publish \ --post_title='WordPress Theme Designer' \ --post_content='Seeking a creative designer with WordPress theme development experience. Must have strong CSS and design skills.' \ - '--meta_input={"jobtype":"ppt","location":"New York, NY","company":"Design Studio"}' \ + '--meta_input={"jobtype":"ppt","location":"New York, NY","company":"Design Studio","howtoapply":"jobs@designstudio.example.com","howtoapply_method":"email"}' \ --porcelain 2>/dev/null) && echo " Created job: WordPress Theme Designer" || true [ -n "$JOB2" ] && $WP wp post term set "$JOB2" job_category design > /dev/null 2>&1 JOB3=$($WP wp post create --post_type=job --post_status=publish \ --post_title='Plugin Support Specialist' \ --post_content='Help our users get the most out of our WordPress plugins. Provide technical support and write documentation.' \ - '--meta_input={"jobtype":"pt","location":"Remote","company":"Plugin Inc"}' \ + '--meta_input={"jobtype":"pt","location":"Remote","company":"Plugin Inc","howtoapply":"https://plugininc.example.com/careers","howtoapply_method":"web"}' \ --porcelain 2>/dev/null) && echo " Created job: Plugin Support Specialist" || true [ -n "$JOB3" ] && $WP wp post term set "$JOB3" job_category support > /dev/null 2>&1 fi diff --git a/jobs.wordpress.net/public_html/wp-content/plugins/jobswp/jobswp-template.php b/jobs.wordpress.net/public_html/wp-content/plugins/jobswp/jobswp-template.php index 0db4655395..23ab784f37 100644 --- a/jobs.wordpress.net/public_html/wp-content/plugins/jobswp/jobswp-template.php +++ b/jobs.wordpress.net/public_html/wp-content/plugins/jobswp/jobswp-template.php @@ -41,17 +41,20 @@ function jobswp_get_job_meta( $post_id, $meta_key ) { $method = 'phone'; } if ( 'email' == $method ) { - $val = sprintf( __( 'Via email', 'jobswp' ), esc_attr( 'mailto:' . sanitize_email( $val ) ) ); + $val = sprintf( + /* translators: %s: mailto link wrapping the word "email". */ + __( 'Via %s', 'jobswp' ), + sprintf( 'email', esc_attr( 'mailto:' . sanitize_email( $val ) ) ) + ); } elseif ( 'web' == $method ) { // Prepend 'http://' if no protocol was specified by job poster if ( 0 !== strpos( $val, 'http' ) ) $val = 'http://' . $val; $val = sprintf( - /* translators: %s: Link to job application web form. */ + /* translators: %s: Link wrapping the words "web form". */ __( 'Via %s', 'jobswp' ), sprintf( - /* translators: %s: URL to job application web form. */ - '' . __( 'web form', 'jobswp' ) . '', + 'web form', esc_url( $val ) ) ); diff --git a/jobs.wordpress.net/public_html/wp-content/themes/jobswp/content-home.php b/jobs.wordpress.net/public_html/wp-content/themes/jobswp/content-home.php index bf6c0faf6e..40997887f8 100644 --- a/jobs.wordpress.net/public_html/wp-content/themes/jobswp/content-home.php +++ b/jobs.wordpress.net/public_html/wp-content/themes/jobswp/content-home.php @@ -134,18 +134,20 @@

- -
-

- +

> +

+ post a job?', 'jobswp' ) ), + __( 'There are no jobs in this category. If you are hiring, you can post a new job.', 'jobswp' ), esc_url( home_url( '/post-a-job/' ) ) - ); - ?> -

-
- + ), + array( 'a' => array( 'href' => array() ) ) + ); + ?> +

+
diff --git a/jobs.wordpress.net/public_html/wp-content/themes/jobswp/content-post-job.php b/jobs.wordpress.net/public_html/wp-content/themes/jobswp/content-post-job.php index 7d0813921c..eaec5f6794 100644 --- a/jobs.wordpress.net/public_html/wp-content/themes/jobswp/content-post-job.php +++ b/jobs.wordpress.net/public_html/wp-content/themes/jobswp/content-post-job.php @@ -142,6 +142,19 @@ $button_label = __( 'Submit Job', 'jobswp' ); } ?> + +

+ job removal page.', 'jobswp' ), + esc_url( home_url( '/remove-a-job/' ) ) + ), + array( 'a' => array( 'href' => array() ) ) + ); + ?> +

diff --git a/jobs.wordpress.net/public_html/wp-content/themes/jobswp/content-single.php b/jobs.wordpress.net/public_html/wp-content/themes/jobswp/content-single.php index bee9793238..b2428f400b 100644 --- a/jobs.wordpress.net/public_html/wp-content/themes/jobswp/content-single.php +++ b/jobs.wordpress.net/public_html/wp-content/themes/jobswp/content-single.php @@ -66,7 +66,19 @@ ?>
- + + array( + 'href' => array(), + 'rel' => array(), + ), + ) + ); + ?> +
  • +
  • +
  • diff --git a/jobs.wordpress.net/public_html/wp-content/themes/jobswp/functions.php b/jobs.wordpress.net/public_html/wp-content/themes/jobswp/functions.php index fb9ab4e7c4..59fc657ae5 100644 --- a/jobs.wordpress.net/public_html/wp-content/themes/jobswp/functions.php +++ b/jobs.wordpress.net/public_html/wp-content/themes/jobswp/functions.php @@ -30,7 +30,8 @@ function jobswp_setup() { load_theme_textdomain( 'jobswp', get_template_directory() . '/languages' ); /** - * Add default posts and comments RSS feed links to head + * Add default posts RSS feed links to head. + * Comments feed is removed below as jobs don't have comments. */ add_theme_support( 'automatic-feed-links' ); @@ -83,13 +84,39 @@ function jobswp_widgets_init() { * Enqueue scripts and styles */ function jobswp_scripts() { - wp_enqueue_style( 'jobswp-style', get_stylesheet_uri(), array(), '20260326' ); + wp_enqueue_style( 'jobswp-style', get_stylesheet_uri(), array(), filemtime( get_stylesheet_directory() . '/style.css' ) ); - wp_enqueue_script( 'jobswp-main', get_template_directory_uri() . '/js/main.js', array(), '20260326', true ); - wp_enqueue_script( 'jobswp-skip-link-focus-fix', get_template_directory_uri() . '/js/skip-link-focus-fix.js', array(), '20130115', true ); + wp_enqueue_script( 'jobswp-main', get_template_directory_uri() . '/js/main.js', array(), filemtime( get_template_directory() . '/js/main.js' ), true ); + wp_enqueue_script( 'jobswp-skip-link-focus-fix', get_template_directory_uri() . '/js/skip-link-focus-fix.js', array(), filemtime( get_template_directory() . '/js/skip-link-focus-fix.js' ), true ); } add_action( 'wp_enqueue_scripts', 'jobswp_scripts' ); +// Remove comments feed link — jobs don't have comments. +add_filter( 'feed_links_show_comments_feed', '__return_false' ); + +/** + * Add RSS auto-discovery links for each job category on the homepage. + */ +function jobswp_category_feed_links() { + if ( ! is_front_page() ) { + return; + } + + $categories = Jobs_Dot_WP::get_job_categories(); + if ( ! $categories ) { + return; + } + + foreach ( $categories as $cat ) { + printf( + '' . "\n", + esc_attr( sprintf( '%s » %s Feed', get_bloginfo( 'name' ), $cat->name ) ), + esc_url( get_term_feed_link( $cat->term_id, 'job_category' ) ) + ); + } +} +add_action( 'wp_head', 'jobswp_category_feed_links' ); + /** * Sets 404 response for author archive requests. */ diff --git a/jobs.wordpress.net/public_html/wp-content/themes/jobswp/header.php b/jobs.wordpress.net/public_html/wp-content/themes/jobswp/header.php index cd3fcd2374..08036d6df9 100644 --- a/jobs.wordpress.net/public_html/wp-content/themes/jobswp/header.php +++ b/jobs.wordpress.net/public_html/wp-content/themes/jobswp/header.php @@ -34,21 +34,18 @@