Поиск для плейлиста
Доброго дня!
Хочу реализовать поиск для сайта по названию трека в плейлисте.
Так как плейлист выводиться стандартным шорткодом wp. То названия не могут захватиться поиском.
Лучшим решением думаю будет прописать названия в метаполе записи. Но не знаю как скормить это в серч куэри.
Буду рад вашим комментам.
Предыдущая идея с подсветкой поисковой фразы в записи при переходе со страницы результатов поиска отработала отлично. Правда были трудности с тем что это все кэшировалось. В итоге конечный код получился такой. Кому интересно, кто не видел код ниже..
function content_search($text) {
$id = get_the_ID();
if( isset( $_GET['search'] ) ) {
$start = true;
if( isset( $_GET['id'] ) ) {
if( $id != $_GET['id'] ) {
$start = false;
} else {
nocache_headers();
}
}
if( $start ) {
$return_url = esc_url( wp_get_referer() );
if( $return_url ) {
$var = wp_parse_url($return_url, PHP_URL_QUERY);
if( substr($var, 0, 2) == 's=' ) {
$search = urldecode(mb_substr($var, 2, (mb_strlen($var) - 2)));
if( $search ) {
$temp = wp_strip_all_tags($text);
if( mb_stripos($temp, $search) !== false ) {
$text = preg_replace( '#(' . preg_quote($search) . ')#uis', '<mark id="search">$1</mark>', $text, 1 );
}
}
}
}
}
}
return $text;
}
Могут... модифицируйте шорткод или другие решения по любому есть, надо на месте смотреть.
Ниже я даю код, я не говорю что он рабочий, просто в качестве примера как скормить. Проверял на отдельном пост тайпе
function content_search($text) { $id = get_the_ID(); if (isset($_GET['search'])) { $start = true; if (isset($_GET['id']) && $id != $_GET['id']) { $start = false; } else { nocache_headers(); } if ($start) { $return_url = esc_url(wp_get_referer()); if ($return_url) { $var = wp_parse_url($return_url, PHP_URL_QUERY); if (substr($var, 0, 2) === 's=') { $search = urldecode(mb_substr($var, 2)); if ($search) { $temp = wp_strip_all_tags($text); if (mb_stripos($temp, $search) !== false) { $text = preg_replace('#(' . preg_quote($search) . ')#uis', '<mark id="search">$1</mark>', $text, 1); } else { // Если название трека не найдено в содержимом, то ищем в метаполях $meta_query = array( 'relation' => 'OR', array( 'key' => 'random_meta_key', // тут 'random_meta_key' пилим свой ключ 'value' => $search, 'compare' => 'LIKE', ), ); $query = new WP_Query(array('meta_query' => $meta_query)); if ($query->have_posts()) { $text = ''; while ($query->have_posts()) { $query->the_post(); $text .= get_the_title() . '<br>'; } wp_reset_postdata(); } } } } } } } return $text; }Интересное решение!
Тоже самое можно закинуть в add_filter('pre_get_posts','SearchFilter');, но оно будет работать по принципу если нет результатов поиска, то ищем в мета полях, что не совсем удачное решение. Спасибо за ответ )
А код выше у меня в add_filter( 'the_content'.. где search говорит что мы перешли в статью со страницы результатов поиска, а $id говорит что мы перешли в кастомную страницу со страницы результатов и нам нужно подсветить слово в куске страницы найдя его по $id.