get_search_form()
Підключає форму пошуку файл теми searchform.php . Якщо такого файлу в шаблоні теми немає, буде використано дефолтний код для форми пошуку.
Не забувайте про безпеку
У рядок пошуку, користувач може вписати будь-що, наприклад робочий скрипт <script>alert('aaaa');<script>
. І якщо вивести рядок запиту на сторінці як є, такий скрипт буде оброблений браузером. А якщо в нього написати щось погане, то ваш веб-сайт можна буде просто зламати.
Тому для виведення запиту пошуку на екран завжди використовуйте функцію WordPress тем .
<?php echo get_search_query(); ?>
Рядок також можна очистити за допомогою: esc_html() .
Хуки з функції
Повертає
null|Строку
.
Використання
<?php get_search_form( $args ); ?>
-
$args
(true/false/array) З версії 5.2 параметр перетворився на масив аргументів:
echo (true/false)
Чи потрібно виводити створені HTML-код на екран.
Типово: true- aria_label (рядок)
Значення артирбуту<form aria-label="XXX">
. Буде корисним, щоб розрізняти кілька форм на одній сторінці.
За замовчуванням: ”
До версії 5.2 параметр називався $echo , був логічним і відповідав за виведення HTML на екран:
- true — Вивести код на екран.
- false – повертати для обробки.
За замовчуванням: array()
Приклади
#1 HTML форми пошуку через файл searchform.php
Створюємо файл searchform.php у папці теми з кодом:
<form role="search" method="get" id="searchform" action="<?php echo home_url( '/' ) ?>" > <label class="screen-reader-text" for="s">Пошук: </label> <input type="text" value="<?php echo get_search_query() ?>" name="s" id="s" /> <input type="submit" id="searchsubmit" value="знайти" /> </form>
Потім, де потрібна форма пошуку, викликаємо функцію get_search_form() , яка виведе вміст створеного нами файлу searchform.php :
<?php get_search_form(); ?>
Майте на увазі, що форма пошуку повинна відправляти GET запит на головну сторінку сайту: action="<?php echo home_url( '/' ); ?>"
) і обов’язково повинен бути параметр s
(що шукати): <input type="text" value="" name="s" id="s" />
.
#2 HTML форми пошуку за замовчуванням
Якщо у темі немає файлу searchform.php , виклик цієї функції виведе HTML форми за замовчуванням:
<form role="search" method="get" id="searchform" class="searchform" action="<?php echo esc_url( home_url( '/' ) )); ?>"> <div> <label class="screen-reader-text" for="s"><?php _x( 'Search for:', 'label' ); ?></label> <input type="text" value="<?php echo get_search_query(); ?>" name="s" id="s" /> <input type="submit" id="searchsubmit" value="<?php echo esc_attr_x( 'Search', 'submit button' ); ?>" /> </div> </form>
Така HTML розмітка буде виведена, якщо НЕ встановлена підтримка html5 в темі. Нагадаю, встановлюється вона через функцію add_theme_support() так:
add_theme_support( 'html5', array( 'search-form' ) );
Однак, якщо підтримка HTML5 включена, то за замовчуванням ми отримаємо такий HTML код форми пошуку:
<form role="search" method="get" class="search-form" action="<?php echo home_url( '/' ); ?>"> <label> <span class="screen-reader-text"><?php echo _x( 'Search for:', 'label' ) ?></span> <input type="search" class="search-field" placeholder="<?php echo esc_attr_x( 'Search …', 'placeholder' ) ?>" value="<?php echo get_search_query() ?>" name= "s" title="<?php echo esc_attr_x( 'Search for:', 'label' ) ?>" /> </label> <input type="submit" class="search-submit" value="<?php echo esc_attr_x( 'Search', 'submit button' ) ?>" /> </form>
Тобто тип поля змінюється із text на search : type="search"
.
Перевагу варто віддавати html5 формі, тому завжди вмикайте це налаштування в темах!
#3 Фільтр (обмеження) результатів пошуку
Крім параметра запиту s
, можна відфільтрувати пошук за типом запису. Для цього додайте форму ще одне input поле з ім’ям post_type :
<input type="hidden" value="post" name="post_type" />
В результаті при надсиланні форми (сабміті) ми отримаємо рядок запиту: ?s=текст&post_type=post
. А це означає, що пошук проходитиме не за всіма типами записів, а лише за типом запису вказаним у полі name=”post_type” , в даному випадку за типом post . За замовчуванням там зазначено: post_type = any
(будь-який тип запису).
Також результати пошуку можна відфільтрувати як завгодно, використовуючи подію pre_get_posts . Приклади дивіться у описі.
#4 HTML форми пошуку через хук
Можна не створювати файл теми searchform.php , а змінити HTML код форми через хук get_search_form , який потрібно вставляти у файл теми functions.php .
add_filter( 'get_search_form', 'my_search_form'); function my_search_form( $form ) { $form = ' <form role="search" method="get" id="searchform" action="' . home_url('/' ) . '" > <label class="screen-reader-text" for="s">Запит для пошуку:</label> <input type="text" value="' . get_search_query() . '" name="s" id="s" /> <input type="submit" id="searchsubmit" value="Знайти" /> </form>'; return $form; }
список змін
З версії 2.7.0 | Введено. |
З версії 5.2.0 | $args array parameter був added in place of an $echo boolean flag. |