WordPress: разбиение на страницы результатов поиска все еще не работает

Я искал решения для верхов и низов и пробовал разные, в том числе тщательно объясненные. Вот Чип Беннет, но я все еще не могу заставить его работать.

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

functions.php

function advanced_search_query($query) {
if ($query->is_search) {
$query->set('s', $_GET['s']);
$query->set('post_type', array( 'properties' ));
$query->set('meta_key', $_GET['meta_key']);
$query->set('orderby', $_GET['sortby']);
$query->set('order', $_GET['order']);
$query->set('posts_per_page', '5');
$query->set('paged', $paged);

if (isset($_GET['author'])) {
$query->set('author', $_GET['author']);
}

if (isset($_GET['propertytype'])) {
$query->set('taxonomy', 'propertytype');
$query->set('terms', $_GET['propertytype']);
}

$minCost = $_GET['minCost'];
$minCost = preg_replace("/[^0-9]/","", $minCost);
if ($minCost == ""){
$minCost = "0";
}

$maxCost = $_GET['maxCost'];
$maxCost = preg_replace("/[^0-9]/","", $maxCost);
if ($maxCost == ""){
$maxCost = "99999999999999";
}

$query->set('meta_query', array(
'relation' => 'AND',
array(
'key' => 'ce_location',
'value' => $_GET['location'],
'compare' => 'LIKE',
'type' => 'CHAR'
),
array(
'key' => 'ce_cost',
'value' => array($minCost, $maxCost),
'compare' => 'BETWEEN',
'type' => 'NUMERIC'
),
array(
'key' => 'ce_bedrooms',
'value' => array($_GET['minBedrooms'], $_GET['maxBedrooms']),
'compare' => 'BETWEEN',
'type' => 'NUMERIC'
),
array(
'key' => 'ce_tenancy',
'value' => $_GET['tenancy'],
'compare' => 'LIKE',
'type' => 'CHAR'
)
));
};
return $query;
};
add_filter('pre_get_posts', 'advanced_search_query', 1000);

Код для получения аргументов запроса

global $query_string;

$query_args = explode("&", $query_string);
$search_query = array();

foreach($query_args as $key => $string) {
$query_split = explode("=", $string);
$search_query[$query_split[0]] = urldecode($query_split[1]);
}
$search_query['paged'] = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;

$search = new WP_Query($search_query);

Код петли:

if ( have_posts() ) :  while (have_posts()) : the_post();

//loop content

endwhile;
if(function_exists('wp_simple_pagination')) { wp_simple_pagination(); } ?>
else :
echo 'Sorry, there are currently no property listings available';
endif;

Любые предложения будут высоко оценены.

РЕДАКТИРОВАТЬ:

Я также заметил, что URL-адрес изменяется, когда я пытаюсь получить доступ к странице 2.

Это URL страницы 1:

http://localhost/cunningham/?location=&propertytype=&minBedrooms=1&maxBedrooms=9&minCost=0&maxCost=100000&meta_key=&tenancy=&s=

URL страницы 2:

http://localhost/cunningham/page/2/?location&propertytype&minBedrooms=1&maxBedrooms=9&minCost=0&maxCost=100000&meta_key&tenancy&s/

3

Решение

У вас есть конфликт между вашим основным запросом и вашим дополнительным (пользовательским) запросом.

Вы делаете вещи наполовину неправильно и наполовину правильно :-). Отпусти, что ты делаешь

  1. Первый раздел кода является правильным методом для изменения основного запроса. Это на самом деле все, что вам нужно, чтобы все заработало. У вас есть пара недостатков здесь, хотя

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

      function advanced_search_query($query) {
      if ( !is_admin() && $query->is_main_query() && $query->is_search() ) {
      
      //REST OF YOUR CODE
      
    • Вам не нужно устанавливать paged параметр в pre_get_posts, Это устанавливается основным запросом и не нуждается в изменении, поэтому удалите его.

    • Кроме того, это должно работать просто отлично. Я не могу проверить ваш код, так как у меня нет такой же настройки, как у вас

  2. Вам не нужен ваш пользовательский (дополнительный) запрос. Вы уже изменили свой основной запрос для обработки ваших изменений

  3. Ваш цикл просто в порядке. Это все, что вам нужно в вашем шаблоне search.php, больше ничего

РЕДАКТИРОВАТЬ

Из комментариев от ОП

Я полагаю, что где-то есть проблема с постоянными ссылками. У меня ничего нет в моем .htaccess Помимо основ и моя структура постоянных ссылок /%category%/%postname%/ и с этой структурой нумерация страниц отлично работает на другой странице с обычным запросом, жестко закодированным в файл php. Буквально только эта страница поиска имеет проблемы, и все это потому, что страница не задает ее URL

И решение

Ну, я нашел решение. Конечный слэш все испортил

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]