Как создать пользовательскую страницу результатов поиска с пользовательскими параметрами URL для пользовательского типа записи?


Так что, я думаю, вопрос в следующем: Как определить новую страницу/URL, на которую я могу передать пользовательские параметры, выполнить поиск по пользовательскому типу записи и передать результаты в пользовательский шаблон для визуализации?

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

Я знаю, как выполнить алгоритм поиска, но я не знаю, как лучше всего определите новую страницу поиска с пользовательскими параметрами в WordPress.

И я также хотел бы избежать написания алгоритма поиска в файле шаблона, если это возможно.

URL-адрес должен выглядеть примерно так:

  • mysite.com/find/begin-date/end-date
  • конкретный пример: mysite.com/find/2018-03-05/2018-03-10

Но также нормально, если это выглядит примерно так:

  • mysite.com/find?begin=2018-03-05&end=2018-03-10
Author: Reygoch, 2018-03-08

1 answers

Добавьте этот код в functions.php

function custom_rewrite_rule() {

    //Initializing Rewrite Tags
    add_rewrite_tag('%begin-date%', '([^&]+)');
    add_rewrite_tag('%end-date%', '([^&]+)');
    add_rewrite_tag('%offset%', '([^&]+)');

    //Find page rewrite rules
    add_rewrite_rule('^find/([^/]*)/([^/]*)/([^/]*)/?','index.php?page_id=<SEARCH_PAGE_ID>&begin-date=$matches[1]&end-date=$matches[2]&offset=$matches[3]','top');
    add_rewrite_rule('^find/([^/]*)/([^/]*)/?','index.php?page_id=<SEARCH_PAGE_ID>&begin-date=$matches[1]&end-date=$matches[2]','top');

    flush_rewrite_rules();
}
add_action('init', 'custom_rewrite_rule', 10, 0);

В шаблоне страницы пользовательского поиска

$begin_date = get_query_var('begin-date');
$end_date   = get_query_var('end-date');
$offset     = get_query_var('offset') ? get_query_var('offset') : 1;

Создайте страницу с slug find и примените к ней пользовательский шаблон страницы.. замените <SEARCH_PAGE_ID> вновь созданным идентификатором страницы и обновите структуру постоянных ссылок!

Используйте эти значения в своем пользовательском запросе в шаблоне страницы!:)

Этот код отобразит URL-адрес в соответствии с вашим желанием структура!

  • mysite.com/find/begin-date/end-date
  • mysite.com/find/begin-date/end-date/offset (если вам нужно включить разбивку на страницы)

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

$begin_date = $_GET['begin'];
$end_date   = $_GET['end');
$offset     = $_GET['page'] ? $_GET['page'] : 1;
  • mysite.com/find?begin=2018-03-05&end=2018-03-10
  • mysite.com/find?begin=2018-03-05&end=2018-03-10&page=2
 1
Author: Hassan Alvi, 2018-03-08 14:10:23