Skip to content

Commit

Permalink
fix: search logic
Browse files Browse the repository at this point in the history
fixes #1072
  • Loading branch information
eteubert committed Nov 15, 2019
1 parent ae8e4b3 commit 41ee488
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 34 deletions.
84 changes: 50 additions & 34 deletions includes/search.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,22 @@
<?php

function podlove_is_search_query($query)
{
if (!isset($query->query_vars['search_terms'])) {
return false;
}

if (isset($query->query_vars['suppress_filters']) && true == $query->query_vars['suppress_filters']) {
return false;
}

if ($query->is_feed()) {
return false;
}

return $query->is_search();
}

/**
* Extend/Replace WordPress core search logic to include episode fields.
*
Expand All @@ -8,25 +26,23 @@
* regular expressions.
*
* If you found this piece of code and are now cursing at me, please get in
* touch.
* touch.
*/
add_filter('posts_search', function($search, $query) {
global $wpdb;
add_filter('posts_search', function ($search, $query) {
global $wpdb;

if (!isset($query->query_vars['search_terms']))
return $search;

if ( isset( $query->query_vars['suppress_filters'] ) && true == $query->query_vars['suppress_filters'] )
return $search;
if (!podlove_is_search_query($query)) {
return $search;
}

$episodesTable = \Podlove\Model\Episode::table_name();
$episodesTable = \Podlove\Model\Episode::table_name();

$search = '';
$searchand = '';
$n = !empty($query->query_vars['exact']) ? '' : '%';
foreach( (array) $query->query_vars['search_terms'] as $term ) {
$term = esc_sql( \Podlove\esc_like( $term ) );
$search .= "
$search = '';
$searchand = '';
$n = !empty($query->query_vars['exact']) ? '' : '%';
foreach ((array) $query->query_vars['search_terms'] as $term) {
$term = esc_sql(\Podlove\esc_like($term));
$search .= "
{$searchand}
(
($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')
Expand All @@ -39,30 +55,30 @@
OR
($episodesTable.chapters LIKE '{$n}{$term}{$n}')
)";
$searchand = ' AND ';
}
$searchand = ' AND ';
}

if (!empty($search)) {
$search = " AND ({$search}) ";
if (!is_user_logged_in()) {
$search .= " AND ($wpdb->posts.post_password = '') ";
}

if ( !empty($search) ) {
$search = " AND ({$search}) ";
if ( !is_user_logged_in() )
$search .= " AND ($wpdb->posts.post_password = '') ";
}
}

return $search;
return $search;
}, 10, 2);

// join into episode table in WordPress searches so we can access episode fields
add_filter('posts_join', function($join, $query) {
global $wpdb;
add_filter('posts_join', function ($join, $query) {
global $wpdb;

if ($query->is_feed())
return $join;
if (!podlove_is_search_query($query)) {
return $join;
}

if (!$query->is_search())
return $join;
$episodesTable = \Podlove\Model\Episode::table_name();
$join .= " LEFT JOIN $episodesTable ON $wpdb->posts.ID = $episodesTable.post_id ";

$episodesTable = \Podlove\Model\Episode::table_name();
$join .= " LEFT JOIN $episodesTable ON $wpdb->posts.ID = $episodesTable.post_id ";

return $join;
}, 10, 2);
return $join;
}, 10, 2);
1 change: 1 addition & 0 deletions readme.txt
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ This product includes GeoLite2 data created by MaxMind, available from http://ww
* require PHP 5.6.20 or higher
* require WordPress 5.2 or higher
* update dependencies
* fix: search logic ([#1072](https://github.com/podlove/podlove-publisher/issues/1072))

= 2.9.7 =

Expand Down

0 comments on commit 41ee488

Please sign in to comment.