Я искал решения для верхов и низов и пробовал разные, в том числе тщательно объясненные. Вот Чип Беннет, но я все еще не могу заставить его работать.
Первая страница результатов работает нормально, но на странице 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/
У вас есть конфликт между вашим основным запросом и вашим дополнительным (пользовательским) запросом.
Вы делаете вещи наполовину неправильно и наполовину правильно :-). Отпусти, что ты делаешь
Первый раздел кода является правильным методом для изменения основного запроса. Это на самом деле все, что вам нужно, чтобы все заработало. У вас есть пара недостатков здесь, хотя
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
, Это устанавливается основным запросом и не нуждается в изменении, поэтому удалите его.
Кроме того, это должно работать просто отлично. Я не могу проверить ваш код, так как у меня нет такой же настройки, как у вас
Вам не нужен ваш пользовательский (дополнительный) запрос. Вы уже изменили свой основной запрос для обработки ваших изменений
Ваш цикл просто в порядке. Это все, что вам нужно в вашем шаблоне search.php, больше ничего
РЕДАКТИРОВАТЬ
Из комментариев от ОП
Я полагаю, что где-то есть проблема с постоянными ссылками. У меня ничего нет в моем
.htaccess
Помимо основ и моя структура постоянных ссылок/%category%/%postname%/
и с этой структурой нумерация страниц отлично работает на другой странице с обычным запросом, жестко закодированным в файл php. Буквально только эта страница поиска имеет проблемы, и все это потому, что страница не задает ее URL
И решение
Ну, я нашел решение. Конечный слэш все испортил
Других решений пока нет …