Skip to content

Commit

Permalink
Update Query Loop filtering to optionally use pronamic-reviews-for:
Browse files Browse the repository at this point in the history
… keyword (#1).
  • Loading branch information
rvdsteege committed Jan 4, 2022
1 parent 9502716 commit 6489c23
Showing 1 changed file with 41 additions and 19 deletions.
60 changes: 41 additions & 19 deletions src/RatingsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -396,13 +396,15 @@ public function render_query_block_data( $parsed_block ) {
return $parsed_block;
}

// Set search query.
if ( ! \array_key_exists( 'search', $parsed_block['attrs']['query'] ) ) {
$parsed_block['attrs']['query']['search'] = '';
// Update `pronamic-reviews-for:self` in search query to use current object post ID.
if ( \array_key_exists( 'search', $parsed_block['attrs']['query'] ) ) {
$parsed_block['attrs']['query']['search'] = \str_replace(
'pronamic-reviews-for:self',
\sprintf( 'pronamic-reviews-for:%d', $object_post_id ),
$parsed_block['attrs']['query']['search']
);
}

$parsed_block['attrs']['query']['search'] .= sprintf( '[pronamic_review_object_post_id=%d]', $object_post_id );

return $parsed_block;
}

Expand All @@ -418,32 +420,52 @@ public function pre_get_posts_pronamic_review_object( \WP_Query $query ) {
return;
}

// Check search query.
// Determine object post ID from search query.
$search = $query->get( 's' );

$pattern = '/\[pronamic_review_object_post_id=(?<object_post_id>\d+)\]/';
$keywords = explode( ' ', $search );

$object_post_id = null;

foreach ( $keywords as $keyword ) {
// Check keyword filter.
if ( 'pronamic-reviews-for:' !== \substr( $keyword, 0, 21 ) ) {
continue;
}

\preg_match( $pattern, $search, $matches );
// Get object post ID from keyword filter.
$explode = explode( ':', $keyword );

if ( ! \array_key_exists( 'object_post_id', $matches ) ) {
if ( isset( $explode[1] ) && ! empty( $explode[1] ) ) {
$object_post_id = $explode[1];
}

break;
}

if ( null === $object_post_id ) {
return;
}

// Cleanup search query.
$query->set( 's', \preg_replace( $pattern, '', $search ) );
if ( isset( $keyword ) ) {
$query->set( 's', \str_replace( $keyword, '', $search ) );
}

// Add meta query for review object ID.
$meta_query = $query->get( 'meta_query' );
if ( \is_numeric( $object_post_id ) ) {
$meta_query = $query->get( 'meta_query' );

if ( ! \is_array( $meta_query ) ) {
$meta_query = array();
}
if ( ! \is_array( $meta_query ) ) {
$meta_query = array();
}

$meta_query[] = array(
'key' => '_pronamic_review_object_post_id',
'value' => $matches['object_post_id'],
);
$meta_query[] = array(
'key' => '_pronamic_review_object_post_id',
'value' => $object_post_id,
);

$query->set( 'meta_query', $meta_query );
$query->set( 'meta_query', $meta_query );
}
}
}

0 comments on commit 6489c23

Please sign in to comment.