-
Notifications
You must be signed in to change notification settings - Fork 367
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add methods to hide filled and expired posts #2449
base: trunk
Are you sure you want to change the base?
Changes from all commits
5afad7d
7a924f6
41f374d
2fccb36
eeb42e0
068a162
d1d04d4
cd94313
3fedb2b
fc8e201
2522485
27685ac
d3b5123
d23b3a3
ea63e66
3a210fb
1a7b7da
de746c4
82e75e6
27b3be7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -81,12 +81,15 @@ public function __construct() { | |||||||||||||||||||||
add_filter( 'wp_insert_post_data', [ $this, 'fix_post_name' ], 10, 2 ); | ||||||||||||||||||||||
add_action( 'add_post_meta', [ $this, 'maybe_add_geolocation_data' ], 10, 3 ); | ||||||||||||||||||||||
add_action( 'update_post_meta', [ $this, 'update_post_meta' ], 10, 4 ); | ||||||||||||||||||||||
add_action( 'updated_post_meta', [ $this, 'delete_filled_job_listing_transient' ], 10, 4 ); | ||||||||||||||||||||||
add_action( 'wp_insert_post', [ $this, 'maybe_add_default_meta_data' ], 10, 2 ); | ||||||||||||||||||||||
add_filter( 'post_types_to_delete_with_user', [ $this, 'delete_user_add_job_listings_post_type' ] ); | ||||||||||||||||||||||
|
||||||||||||||||||||||
add_action( 'transition_post_status', [ $this, 'track_job_submission' ], 10, 3 ); | ||||||||||||||||||||||
|
||||||||||||||||||||||
add_action( 'parse_query', [ $this, 'add_feed_query_args' ] ); | ||||||||||||||||||||||
add_action( 'pre_get_posts', [ $this, 'maybe_hide_filled_job_listings' ] ); | ||||||||||||||||||||||
add_action( 'pre_get_posts', [ $this, 'maybe_hide_expired_job_listings' ] ); | ||||||||||||||||||||||
|
||||||||||||||||||||||
// Single job content. | ||||||||||||||||||||||
$this->job_content_filter( true ); | ||||||||||||||||||||||
|
@@ -659,6 +662,133 @@ public function job_feed() { | |||||||||||||||||||||
remove_filter( 'posts_search', 'get_job_listings_keyword_search' ); | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
/** | ||||||||||||||||||||||
* Retrieve and return the post IDs of any job listings marked as filled. | ||||||||||||||||||||||
* | ||||||||||||||||||||||
* @return array Array of filled job listing post IDs. | ||||||||||||||||||||||
*/ | ||||||||||||||||||||||
public function get_filled_job_listings(): array { | ||||||||||||||||||||||
|
||||||||||||||||||||||
$filled_jobs_transient = get_transient( 'hide_filled_jobs_transient' ); | ||||||||||||||||||||||
if ( false === $filled_jobs_transient ) { | ||||||||||||||||||||||
$filled_jobs_transient = get_posts( | ||||||||||||||||||||||
[ | ||||||||||||||||||||||
'post_status' => 'publish', | ||||||||||||||||||||||
'post_type' => 'job_listing', | ||||||||||||||||||||||
yscik marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||
'fields' => 'ids', | ||||||||||||||||||||||
'posts_per_page' => -1, | ||||||||||||||||||||||
'meta_query' => [ | ||||||||||||||||||||||
[ | ||||||||||||||||||||||
'key' => '_filled', | ||||||||||||||||||||||
'value' => '1', | ||||||||||||||||||||||
'compare' => '=', | ||||||||||||||||||||||
], | ||||||||||||||||||||||
], | ||||||||||||||||||||||
] | ||||||||||||||||||||||
); | ||||||||||||||||||||||
set_transient( 'hide_filled_jobs_transient', $filled_jobs_transient, DAY_IN_SECONDS ); | ||||||||||||||||||||||
} | ||||||||||||||||||||||
return $filled_jobs_transient; | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
/** | ||||||||||||||||||||||
* Maybe exclude filled job listings from search and archive pages. | ||||||||||||||||||||||
* | ||||||||||||||||||||||
* @param $query WP_Query $query | ||||||||||||||||||||||
* | ||||||||||||||||||||||
* @return void | ||||||||||||||||||||||
*/ | ||||||||||||||||||||||
public function maybe_hide_filled_job_listings( WP_Query $query ): void { | ||||||||||||||||||||||
$hide_filled_positions = get_option( 'job_manager_hide_filled_positions' ); | ||||||||||||||||||||||
|
||||||||||||||||||||||
if ( ! $hide_filled_positions ) { | ||||||||||||||||||||||
return; | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
/** | ||||||||||||||||||||||
* We want to ensure this only runs when: (1) not in admin and (2) the query is the main query and (3) the query | ||||||||||||||||||||||
* is either a search query or an archive query. This is to address complications stemming from the following | ||||||||||||||||||||||
* feature request: https://github.com/Automattic/WP-Job-Manager/issues/1884 | ||||||||||||||||||||||
* | ||||||||||||||||||||||
* See also: | ||||||||||||||||||||||
* | ||||||||||||||||||||||
* https://github.com/Automattic/WP-Job-Manager/pull/1570 | ||||||||||||||||||||||
* https://github.com/Automattic/WP-Job-Manager/pull/2367 | ||||||||||||||||||||||
* https://github.com/Automattic/WP-Job-Manager/issues/2423 | ||||||||||||||||||||||
*/ | ||||||||||||||||||||||
|
||||||||||||||||||||||
if ( | ||||||||||||||||||||||
! is_admin() | ||||||||||||||||||||||
&& $query->is_main_query() | ||||||||||||||||||||||
&& ( $query->is_search() || $query->is_archive() ) | ||||||||||||||||||||||
Comment on lines
+721
to
+723
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It would be nice to add a comment here clarifying the reason for this logic: We want the filtering to apply only to search and archive public facing queries. We don't want it to apply in the admin panel. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Committed 27b3be7 |
||||||||||||||||||||||
) { | ||||||||||||||||||||||
|
||||||||||||||||||||||
$query->set( 'post__not_in', $this->get_filled_job_listings() ); | ||||||||||||||||||||||
} | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
/** | ||||||||||||||||||||||
* Maybe exclude expired job listings from search and archive pages. | ||||||||||||||||||||||
* | ||||||||||||||||||||||
* @param $query WP_Query $query | ||||||||||||||||||||||
* | ||||||||||||||||||||||
* @return void | ||||||||||||||||||||||
*/ | ||||||||||||||||||||||
public function maybe_hide_expired_job_listings( WP_Query $query ): void { | ||||||||||||||||||||||
$hide_expired = get_option( 'job_manager_hide_expired' ); | ||||||||||||||||||||||
|
||||||||||||||||||||||
if ( ! $hide_expired ) { | ||||||||||||||||||||||
return; | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
/** | ||||||||||||||||||||||
* We want to ensure this only runs when: (1) not in admin and (2) the query is the main query and (3) the query. | ||||||||||||||||||||||
* See the comment in the maybe_hide_filled_job_listings() method for more information. | ||||||||||||||||||||||
*/ | ||||||||||||||||||||||
|
||||||||||||||||||||||
if ( | ||||||||||||||||||||||
! is_admin() | ||||||||||||||||||||||
&& $query->is_main_query() | ||||||||||||||||||||||
&& ( $query->is_search() || $query->is_archive() ) | ||||||||||||||||||||||
) { | ||||||||||||||||||||||
Comment on lines
+750
to
+753
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same here about the comment explaining the logic. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Committed 27b3be7 |
||||||||||||||||||||||
|
||||||||||||||||||||||
$this->make_expired_private(); | ||||||||||||||||||||||
|
||||||||||||||||||||||
add_action( 'posts_selection', [ $this, 'make_expired_public' ] ); | ||||||||||||||||||||||
} | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
/** | ||||||||||||||||||||||
* Make the expired post status public. | ||||||||||||||||||||||
* | ||||||||||||||||||||||
* @return void | ||||||||||||||||||||||
* @internal | ||||||||||||||||||||||
*/ | ||||||||||||||||||||||
public function make_expired_public(): void { | ||||||||||||||||||||||
|
||||||||||||||||||||||
global $wp_post_statuses; | ||||||||||||||||||||||
|
||||||||||||||||||||||
if ( isset( $wp_post_statuses['expired'] ) ) { | ||||||||||||||||||||||
$wp_post_statuses['expired']->public = true; | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
} | ||||||||||||||||||||||
Comment on lines
+767
to
+775
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I couldn´t find any information about this global. Can you make a brief summary on what is it and what is this supposed to do? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @jom and I discussed this global in a call. AFAIK it's first mentioned here in
It is an array of all post statuses. What we're doing here is checking that the From there, if WP-Job-Manager/includes/class-wp-job-manager-post-types.php Lines 732 to 741 in 82e75e6
|
||||||||||||||||||||||
|
||||||||||||||||||||||
/** | ||||||||||||||||||||||
* Make the expired post status private. | ||||||||||||||||||||||
* | ||||||||||||||||||||||
* @return void | ||||||||||||||||||||||
* @internal | ||||||||||||||||||||||
*/ | ||||||||||||||||||||||
public function make_expired_private() { | ||||||||||||||||||||||
|
||||||||||||||||||||||
global $wp_post_statuses; | ||||||||||||||||||||||
|
||||||||||||||||||||||
if ( isset( $wp_post_statuses['expired'] ) ) { | ||||||||||||||||||||||
$wp_post_statuses['expired']->public = false; | ||||||||||||||||||||||
} | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
/** | ||||||||||||||||||||||
* Adds query arguments in order to make sure that the feed properly queries the 'job_listing' type. | ||||||||||||||||||||||
* | ||||||||||||||||||||||
|
@@ -1898,4 +2028,23 @@ public function delete_user_add_job_listings_post_type( $types ) { | |||||||||||||||||||||
|
||||||||||||||||||||||
return $types; | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
/** | ||||||||||||||||||||||
* Delete the 'job_manager_hide_filled_jobs' transient when meta is updated. | ||||||||||||||||||||||
* | ||||||||||||||||||||||
* @param int $meta_id ID of updated metadata entry. | ||||||||||||||||||||||
* @param int $object_id ID of the object metadata is for. | ||||||||||||||||||||||
* @param string $meta_key Metadata key. | ||||||||||||||||||||||
* @param mixed $_meta_value Metadata value. This will be a PHP-serialized string representation of the value if the value is an array, an object, or itself a PHP-serialized string. | ||||||||||||||||||||||
* | ||||||||||||||||||||||
* @return void | ||||||||||||||||||||||
*/ | ||||||||||||||||||||||
public function delete_filled_job_listing_transient( $meta_id, $object_id, $meta_key, $_meta_value ) { | ||||||||||||||||||||||
|
||||||||||||||||||||||
if ( '_edit_lock' !== $meta_key || 'job_listing' !== get_post_type( $object_id ) ) { | ||||||||||||||||||||||
return; | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
delete_transient( 'hide_filled_jobs_transient' ); | ||||||||||||||||||||||
} | ||||||||||||||||||||||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe this should be
update_post_meta
and not updated ? I couldn't find theupdated_post_meta
hook.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is a sneaky dynamic one: http://developer.wordpress.org/reference/hooks/updated_(meta_type)_meta/