Поддержка Проблемы и решения Вывод на страницу запроса к БД

  • Добрый день.

    У меня есть небольшой корпоративный сайт на WordPress, и мне потребовалось реализовать на нем дополнительный функционал.

    Имеется сторонняя база данных на PostgreSQL. Нужно создать страничку на сайте WordPress, на которой будет выведена форма запроса данных (например, «Фамилия», «Адрес», «Начало периода», «Конец периода»). На основании введенных пользователем данных, нужно выполнить запрос к БД PostgreSQL и вывести на страницу сайта WordPress результат выполнения запроса.

    Я создал дочернюю тему к используемой на сайте, и в ее файле function.php создал шорткод, который выводит на страницу форму:

    <?php
    add_action( 'wp_enqueue_scripts', 'enqueue_parent_styles' );
    
    function enqueue_parent_styles() {
       wp_enqueue_style( 'parent-style', get_template_directory_uri().'/style.css' );
    }
    
    add_shortcode( 'city_info', 'city_info' );
    /* DB filter form shortcode
     *
    */
    function city_info() {
    
      ob_start();
      ?>
      <form id="city_info">
        Фамилия <input type="text" name="ct_name" id="ct_name" value=""/>
        Адрес <input type="text" name="ct_address" id="ct_address" value=""/><br>
        Период с <input type="date" name="ct_sdate" id="ct_sdate" value=""/>
        по <input type="date" name="ct_edate" id="ct_edate" value=""/><br>
        <input type="submit" id="submit-info" class="button" value="Запросить данные"/>
      </form>
      <?php
    
      return ob_get_clean();
    
    }
    

    Но теперь я не понимаю, что делать дальше. Будь это простая html-форма, я бы написал для нее php-обработчик, который указал бы в form-action. Но здесь нужно делать как-то иначе, или результат будет выведен на новую страницу, выбивающуюся из общей структуры сайта.
    Подскажите, как правильно написать обработчик для этой формы, чтобы данные были выведены на страницу сайта WordPress с формой, либо на другую страницу сайта?

Просмотр 8 ответов — с 1 по 8 (всего 8)
  • action формы вообще не указывайте, будет вызываться та же страница с тем же шорткодом. В этом же шорткоде сделайте проверку, что переданы параметры запроса и если переданы, делайте запрос к базе и выводите результат.

    Зачем вы используете ob_*, честно говоря, я не понимаю. Проще же с heredoc-синтаксисом:

    
    $html = <<< HTML
    <form id="city_info">
    ...
    </form>
    HTML;
    return $html;
    

    Юрий, спасибо за подсказку, попробую разобраться.

    ob_* использую, т.к. делал на основе найденного в сети рецепта создания shortcode. Я очень недавно начал работать с WordPress и пока многого не понимаю.

    Я очень недавно начал работать с WordPress

    Это вообще-то php в чистом виде, и от движка никак не зависит.

    Создайте кастомный шаблон для своей страницы.

    Это вообще-то php в чистом виде, и от движка никак не зависит.

    Простите мне мое невежество. Но php мне тоже не родной язык, я знаком с ним довольно поверхностно, поэтому не могу с уверенностью сказать, где что…

    Создайте кастомный шаблон для своей страницы.

    Прошу прощения, я листал документацию, и приблизительно представляю себе, что такое кастомный шаблон в общем виде и как его создать, но вот что должно быть внутри этого шаблона для реализации моей задачи — не представляю совершенно.

    не могу с уверенностью сказать, где что…

    Пользуйтесь документацией. Хотя бы для того, чтобы быть уверенным, что код, найденный на просторах Интернета, не будет конфликтовать с используемыми версиями php и wordpress.

    то должно быть внутри этого шаблона для реализации моей задачи

    То же самое, что в шаблоне page.php, но вместо the_content() содержимое шорткода (только с выводом, а не возвратом).

    То же самое, что в шаблоне page.php, но вместо the_content() содержимое шорткода (только с выводом, а не возвратом).

    Юрий, еще раз спасибо!
    Не уверен, что все понял, но думаю, что поэкспериментирую и разберусь; я пока продолжаю разбираться с шорткодом с проверкой параметров, дело потихоньку движется, попозже займусь и шаблонами.

    Всем спасибо за помощь, у меня все заработало.

    Попробовал оба варианта, с шорткодом и с шаблоном. Вариант с шорткодом в дочерней теме мне показался проще и «дешевле» в обслуживании. Насколько я понимаю, дочерняя тема автоматически подхватит все обновления родительской, не теряя своих функций, а обновление родителя никак не повлияет на функционал потомка; в случае с шаблоном нужно будет держать в уме, что обновление теоретически может порушить внесенные в тему изменения. Да и просто скопировать в шаблон код из шорткода не получилось, пришлось вносить правки. Заработало и так и так, но шорткод показался проще и изящнее.

    Еще раз всем спасибо!

Просмотр 8 ответов — с 1 по 8 (всего 8)