Пагинация при пользовательском запросе WP_Query на странице поиска search

Столкнулся с проблемой работы пагинации при выполнении пользовательского запроса WP_Query. Поиск осуществляется по произвольным полям [meta_query].

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

Первая страница поиска : сайт.ру/search/page/2/?city=par_1&type_of_room=par_2(работает)

Вторая страница поиска: сайт.ру/search/page/2/?city=par_1&type_of_room=par_2 (не работает)

P.S: Значения для массива $_GET сохраняются в адресной строке при переходе на другую страницу пагинации. Но когда его пытаешься вывести массив $_GET при помощи print_r() или var_dump() на следующей странице, он пустой.

Форма поиска:

// Город
$city = (string)trim(htmlspecialchars($_GET['city']));
// Имя категории
$type_of_room = (string)trim(htmlspecialchars($_GET['type_of_room']));

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

	<label for="l_city">Населенный пункт:</label>
	<input type="text" name="city" value="<?php if(!empty($city)){echo $city;} ?>" maxlength="30" id="l_city" placeholder="Название города">

<label for="l_type_of_room">Тип квартиры:</label>
<select name="type_of_room" id="l_type_of_room">
	<option value="">Не указано</option>
	<option value="studio" <?php echo selected($type_of_room, 'studio'); ?>>Студия</option>
	<option value="1r" <?php echo selected($type_of_room, '1r'); ?>>1 комната</option>
	<option value="2r" <?php echo selected($type_of_room, '2r'); ?>>2 комнаты</option>
	<option value="3r" <?php echo selected($type_of_room, '3r'); ?>>3 комнаты</option>
	<option value="4r" <?php echo selected($type_of_room, '4r'); ?>>4 комнаты</option>
	<option value="5r" <?php echo selected($type_of_room, '5r'); ?>>5 комнат</option>
</select>

	<input type="submit" value="Применить">
	<span class="reset-form">Сбросить</span>
</form>

Массив для WP_Query:

Массив формируется в файле functions.php в функции my_search_query().

function my_search_query () {

	$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

	# Основные параметры запроса
	$args = array(
		'paged' => $paged,
		'posts_per_page' => '2', // Выводим все записи на одной странице
		'post_type' => 'post', // Только записи с пометкой пост
		'post_status' => 'publish', // Только опубликованные объявления
		'author__not_in' => '-1', // Исключаем посты администратора
		'order by' => 'date', // сортируем по дате записи
		'order' => 'DESC', // сортировка в порядке убывания
	);

	# Добавляем в основной массив, массив для meta-полей
	$args['meta_query'] = array();

	# Динамические параметры запроса

	// Имя категории, в которой будет происходить поиск
	if(isset($_GET['type_of_room']) && !empty($_GET['type_of_room']) ){

		$args['category_name'] = (string)trim(htmlspecialchars($_GET['type_of_room']));

	}else{
		unset($_GET['type_of_room']);
	}

	// Город
	if(isset($_GET['city']) && !empty($_GET['city']) ){

		$args['meta_query']['address_rent_object'] = array(
			'key' => 'address_rent_object',
			'compare' => 'LIKE',
			'value' => (string)trim(htmlspecialchars($_GET['city'])),
			'type' => 'CHAR'
		);

	}else{
		unset($_GET['city']);
	}

	return new WP_Query($args);

}

Страница на которой выводятся результаты поиска:

Страница определена при помощи шаблона: / Template Name: Search /

        // Если существует переменная $_GET и она не пустая
		if(isset($_GET) && !empty($_GET)){

			$query = my_search_query();

			if($query->have_posts() ){

				while($query->have_posts()){

					$query->the_post();

					the_title();

				}

			# Источник: https://wp-kama.ru/function/paginate_links
			echo paginate_links(
				array(
					'base'         => str_replace( 999999999, '%#%', esc_url( get_pagenum_link( 999999999 ) ) ),
					'total'        => $query->max_num_pages,
					'current'      => max( 1, get_query_var( 'paged' ) ),
					'format'       => '?paged=%#%',
					'show_all'     => false,
					'type'         => 'plain',
					'end_size'     => 2,
					'mid_size'     => 1,
					'prev_next'    => true,
					'prev_text'    => 'Prev',
					'next_text'    => 'Next',
					'add_args'     => false,
					'add_fragment' => '',
				)
			);

			//  // восстанавливаем глобальную переменную $post
			wp_reset_postdata();

			} else {
				// текст/код, если постов нет
				echo '
					<!-- Объявлений не найдено -->
					<div class="no-list-flat">
						<p>По вашему запросу ничего не найдено.</p>
						<p>Попробуйте изменить параметры и повторить поиск.</p>
					</div>';
			}

		}else{
			echo '
			<div class="no-list-flat">
				<p>По вашему запросу ничего не найдено.</p>
				<p>Попробуйте изменить параметры и повторить поиск.</p>
			</div>';
		}
Заметки к вопросу:
Kama год назад

Код просмотрел быстро - выглядит рабочим. Попробуй вместо paged заюзать page вот тут: get_query_var('paged').

bztFDK84coE8 год назад

Пробовал этот вариант, не работает. Также определял и глобальные переменные wp_query и paged, тоже не сработало.

А есть ли разница в том, что у меня стандартный шаблон search.php не определен 9не создан). И пользовательский запрос я перенаправляю на страницу, которую определил при помощи шаблона template name и присвоил ей имя сайт.ру/search. Возможен ли здесь конфликт?

UPD: как раз таки проблемы была в том, что описал выше.

Kama год назад

В get_query_var('paged') было пусто, ЧПУ Правила не парсили такой УРЛ /search/page/X/?

bztFDK84coE8 год назад

нет, не парсили такой УРЛ