Пользовательский поиск в вордпресс

Я создал собственный шаблон, в котором мне нужно создать форму поиска и отобразить результаты в виде простого списка. Я попытался создать форму таким образом:

<form role="form" action="../wp-content/api/search-json.php?key" method="post" id="searchform"> 
    <div class="form-group">

        <input id="search-protocol" type="text" class="form-control" name="typeahead"/>
    </div>
    <button type="submit" class="btn btn-default">Cerca</button>
</form>

и страница search-json.php такова:

<?php


    $path = $_SERVER['DOCUMENT_ROOT'];

    include_once $path . '/wp-config.php';
    include_once $path . '/wp-load.php';
    include_once $path . '/wp-includes/wp-db.php';
    include_once $path . '/wp-includes/pluggable.php';
    global $wpdb;
    $key=$_GET['key'];

        $wpdb->get_results("SELECT * FROM list WHERE code LIKE '%{$key}%'");

        $json = $wpdb->last_result;
        echo json_encode($json);

?>

Но я не могу показать результаты. Мне нужен очень простой список.


person Atlas91    schedule 19.10.2015    source источник


Ответы (2)


Ваша форма должна быть с методом GET, если вы хотите обрабатывать $_GET['key'] . Или вы можете изменить его на $key = $_POST['key'].

Также я не вижу, где в вашей форме ввод для переменной $key. Это должно быть что-то вроде

<input id="search-protocol" type="text" class="form-control" name="key"/>

Итак, наконец, у нас есть

<form role="form" action="../wp-content/api/search-json.php" method="post" id="searchform"> 
    <div class="form-group">

        <input id="search-protocol" type="text" class="form-control" name="key"/>
    </div>
    <button type="submit" class="btn btn-default">Cerca</button>
</form>

попробуйте в своем файле PHP:

$prepare = $wpdb->prepare("SELECT * FROM list WHERE code LIKE %s", $key); 
$results = $wpdb->get_results($prepare);
echo json_encode($results);
person DrHolera    schedule 19.10.2015
comment
Если я изменю в $key = $_POST['key'] я получаю внутреннюю ошибку сервера :( и как я могу поместить результат в список под вводом? - person Atlas91; 19.10.2015
comment
Хорошо, извините, я забыл ; после $key = $_POST['key'].. Но он перенаправляет меня на страницу с json и без фильтрации запроса.. Мне нужно показать список, понимающий входную фильтрацию для значения, которое я написал на входе - person Atlas91; 19.10.2015
comment
На этой странице в JSON есть результаты вашего запроса? Вы меняете имя поля ввода? - person DrHolera; 19.10.2015
comment
Я использую вашу форму сейчас. Но просто приводит меня на страницу search-json.php со всем json. Кажется, запрос просто SELECT * FROM list без каких-либо условий WHERE - person Atlas91; 19.10.2015
comment
Пожалуйста, проверьте - возможно, ваша таблица содержит префикс. Также попробуйте $prepare = $wpdb-›prepare(SELECT * FROM list WHERE code LIKE %s, $key); $results = $wpdb->get_results($prepare); - person DrHolera; 19.10.2015

Может быть, просто используйте get_search_form, функцию WordPress.

@codex

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

person Nozifel    schedule 19.10.2015