get_search_form() — вывести форму поиска

Функция get_search_form() в WordPress используется для отображения формы поиска. Она автоматически подключает файл searchform.php из темы или выводит стандартную форму поиска, если такой файл отсутствует.

Пример как вывести форму поиска get_search_form() в шаблоне страницы

Базовый код, который вы можете добавить к себе в шаблон страницы или записи, который подключит файл searchform.php и выведет форму поиска.

<?php get_search_form(); ?>

Код будет выводить форму поиска в том случае если в корне вашей темы присутствует файл searchform.php, если такого файла нет мы можем создать собственную полноценную форму, читайте ниже.

Готовая форма поиска для WordPress 

Если вы создаете тему самостоятельно, с нуля и у вас нет стандартного файла searchform.php то вы можете использовать следующий код чтобы переопределить форму поиска в рабочий готовый вариант.

<form role="search" method="get" action="<?php echo home_url( '/' ); ?>">

    <label for="s" class="screen-reader-text">Поиск:</label>

    <input type="text" name="s" id="s" placeholder="Введите запрос...">

    <input type="submit" value="Поиск">

</form>

Этот код создаст стандартную форму поиска. Вы можете разместить этот код в любом месте или шаблоне как например page.php, single.php или любом другом.

Также вы можете стилизовать с помощью CSS стилей данную форму поиска и получится что-то типо такого:

<style>

    .search-form {

        padding: 10px;

        background-color: #f2f2f2;

        text-align: center;

    }

    .search-form input[type="text"] {

        width: 200px;

        padding: 5px;

    }

    .search-form input[type="submit"] {

        padding: 5px 15px;

        background-color: #4CAF50;

        color: white;

        border: none;

        border-radius: 5px;

        cursor: pointer;

    }

    .search-form input[type="submit"]:hover {

        background-color: #45a049;

    }

</style>
<form role="search" method="get" action="<?php echo home_url( '/' ); ?>" class="search-form">

    <input type="text" name="s" id="s" placeholder="Введите запрос...">

    <input type="submit" value="Поиск">

</form>

Вы можете отделить приведенные в примере CSS стили формы поиска и вставить их в css файл вашей темы чтобы код шаблона был более структурированным.

Изменение формы поиска get_search_form() через хук:

Можно переопределить стандартную форму поиска, используя фильтр get_search_form:

function custom_search_form( $form ) {

    $form = '<form role="search" method="get" action="'.home_url( '/' ).'">' .

            '<input type="search" name="s" />' .

            '<input type="submit" value="Поиск" />' .

            '</form>';

    return $form;

}

add_filter( 'get_search_form', 'custom_search_form' );

Отображение разных форм поиска на разных страницах

Довольная часто сталкиваюсь с потребностью сделать разные формы поиска для разных типов страниц, поскольку логика каждой из форм будет разной и выводить необходимо разные типы постов, вы можете использовать данный пример как основу.

if ( is_page( 'blog' ) ) {

    add_filter( 'get_search_form', 'blog_search_form' );

} else if ( is_page( 'products' ) ) {

    add_filter( 'get_search_form', 'product_search_form' );

}

В коде мы разделили вывод формы поиска отдельно для блога и отдельно для товаров.

AJAX форма поиска для WordPress

А теперь давайте сделаем свою собственную форму поиска с использованием AJAX, благодаря чему результаты поиска будут отображаться без перезагрузки страницы.

Код формы поиска Ajax

Добавьте его в свой шаблон страницы, где форма должна выводиться (на будущее оставьте место под формой поиска — там будут сразу выводиться результаты поиска)

<form id="ajax-search-form" role="search" method="get" action="<?php echo home_url( '/' ); ?>">

    <input type="search" name="s" id="ajax-search-input">

    <input type="submit" value="Поиск">

</form>

<div id="search-results"></div>

JavaScript для обработки AJAX-запроса

Скрипт можете добавить прямо в шаблон рядом с формой поиска в таком случае добавьте теги <script>  тут код, который ниже </script>

jQuery(document).ready(function($) {

    $('#ajax-search-form').submit(function(event) {

        event.preventDefault();

        var searchValue = $('#ajax-search-input').val();

        $.ajax({

            url: '<?php echo admin_url('admin-ajax.php'); ?>',

            type: 'post',

            data: { action: 'ajax_search', keyword: searchValue },

            success: function(result) {

                $('#search-results').html(result);

            }

        });

    });

});

Или подключите данный скрипт в отдельный файл с расширением .js

PHP-обработчик для AJAX-запроса

Теперь напишем код для обработки нашего запроса, чтобы результаты поиска появлялись на странице без перезагрузки. Код нужно добавить в файл function.php вашей темы.

add_action( 'wp_ajax_nopriv_ajax_search', 'ajax_search' );

add_action( 'wp_ajax_ajax_search', 'ajax_search' );

function ajax_search() {

    $keyword = $_POST['keyword'];

    $query = new WP_Query( array( 's' => $keyword ) );

    if ( $query->have_posts() ) {

        while ( $query->have_posts() ) {

            $query->the_post();

            echo '<div><a href="' . get_permalink() . '">' . get_the_title() . '</a></div>';

        }

    } else {

        echo 'Ничего не найдено.';

    }

    wp_die();

}

Этот пример демонстрирует базовую реализацию AJAX поиска, где пользовательский ввод обрабатывается асинхронно, и результаты отображаются без перезагрузки страницы. Вы можете его модернизировать или взять за основу чтобы протестировать wordpress поиска на ajax.

Финалочка

get_search_form() довольно гибкое и универсальное решение для создания индивидуальных форм поиска на сайте WordPress. С помощью простых изменений можно адаптировать форму поиска под любые потребности и дизайн.

Для отправки комментария вам необходимо авторизоваться.

Популярные статьи: