thehighhomie
@thehighhomie

Wordpress: поиск по id поста?

Можно ли сделать так, чтобы поиск искал по id постов? к примеру я ввожу в поиске 325 (это айди кастомного поста) и при результатах он вывел этот пост?
  • Вопрос задан
  • 1549 просмотров
Решения вопроса 2
maxxannik
@maxxannik
Сайты на WordPress + Интернет магазины WooCommerce
хукт фильтр posts_search
в нем можно добавить поле ID для поиска.

пример:
function search_by_title_content_excerpt_id( $search, &$wp_query )
{
    global $wpdb;
    if ( empty( $search ) )
        return $search; // skip processing - no search term in query
    $q = $wp_query->query_vars;
    $n = ! empty( $q['exact'] ) ? '' : '%';
    $search =
    $searchand = '';
    foreach ( (array) $q['search_terms'] as $term ) {
        $term = esc_sql( like_escape( $term ) );
        $search .= "{$searchand}(($wpdb->posts.post_title LIKE '{$n}{$term}{$n}') OR ($wpdb->posts.post_content LIKE '{$n}{$term}{$n}') OR ($wpdb->posts.post_content_filtered LIKE '{$n}{$term}{$n}') OR ($wpdb->posts.ID = '{$term}'))";
        $searchand = ' AND ';
    }
    if ( ! empty( $search ) ) {
        $search = " AND ({$search}) ";
        if ( ! is_user_logged_in() )
            $search .= " AND ($wpdb->posts.post_password = '') ";
    }
	return $search;
} add_filter( 'posts_search', 'search_by_title_content_excerpt_id', 500, 2 );
Ответ написан
@ivaros
В моем случае помогла комбинациия действий:
в functions.php
function my_search_pre_get_posts($query)
{

    // If it's not a search return
    if( !isset( $query->query_vars['p'] ) )
        return;

    // If it's a search but there's no prefix, return
    if( '#' != substr( $query->query_vars['p'], 0, 1 ) )
        return;

    // Validate the numeric value
    $id = absint( substr( $query->query_vars['p'], 1 ) );
    if( !$id )
        return; // Return if no ID, absint returns 0 for invalid values

    // If we reach here, all criteria is fulfilled, unset search and select by ID instead
    unset( $query->query_vars['p'] );
    $query->query_vars['p'] = $id;
}

// Filter the search page
add_filter('pre_get_posts', 'my_search_pre_get_posts');


2) На странице с поиском вставляем
<?php 
add_filter('pre_get_posts', 'my_search_pre_get_posts');
 ?>

<div class="search-block">
    <form role="search" method="get" id="searchform" action="<?php bloginfo('home'); ?>/">
        <input id="s" type="text" placeholder="введите номер проекта" name="s" value="">
        <input type="submit" id="searchsubmit" value="Найти проект" />
    </form>
</div>


Надеюсь мой комент будет Вам полезен :)))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы