Функция get_query_var совсем не работает
Да, есть похожие темы об этой функции, get_query_var('paged') выдает одинаковый результат
сортировка записей блога не работает при использовании get_query_var
Я использую wordpress3.5, у меня есть своя система на основе php mysql, и мне нужно интегрировать функцию блога, мне просто нужно вывести последние записи
в отдельный php файл с сортировкой по дате публикации
. В основном, мои требования просты:
вывести все записи в php файл, допустим этот файл называется blog_show.php
Поскольку я буду использовать WordPress API вне WordPress, мне нужно сначала импортировать WordPress, способ можно найти здесь Интеграция WordPress с вашими сайтами
Вот часть моего blog_show.php
define('WP_USE_THEMES', false);
require_once '../blog/wp-load.php';
global $wp_query;
wp_reset_query();
$current_page = (get_query_var('p')) ? get_query_var('p') : 1;
$query_args = array(
'orderby' => 'date',
'order' => 'DESC',
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => 2,
'paged' => $current_page,
//'add_args' => true
);
$lateset_posts = new WP_Query($query_args);
$paging_args = array(
'base' => '%_%',
'format' => '?p=%#%',
'total' => 10,
'current' => $current_page,
'end_size' => 1,
'mid_size' => 1,
'prev_next' => True,
'prev_text' => __('« Предыдущая'),
'next_text' => __('Следующая »')
);
$lateset_posts_paging = paginate_links($paging_args);
Всё в порядке, я могу использовать
$lateset_posts = new WP_Query($query_args);
чтобы найти нужные записи. Но я не могу использовать
get_query_var('p')
Я всегда получаю одно и то же значение.
И я обнаружил, что даже если я объявляю wp_query как глобальную, она все равно не может быть использована, почти все поля wp_query имеют значение null
.
Из-за того, что get_query_var('p')
и $wp_query
не могут быть использованы, моя пагинация тоже не работает.
Как видите, переменная p
используется только в двух местах
$current_page = (get_query_var('p')) ? get_query_var('p') : 1;
$query_args = array(
//что-то
'paged' => $current_page,
);
и
$paging_args = array(
'base' => '%_%',
'format' => '?p=%#%', //P здесь
'total' => 10,
'current' => $current_page,
'end_size' => 1,
'mid_size' => 1,
'prev_next' => True,
'prev_text' => __('« Предыдущая'),
'next_text' => __('Следующая »')
);
Я провел тест, даже если я изменил p
на paged
или что-то другое
, все равно получаю ту же ошибку.
Где я ошибаюсь, нужно ли мне подключить дополнительные php файлы? Спасибо.

WordPress не добавляет автоматически все параметры строки запроса ($_GET параметры) в качестве query_var
.
Когда Query Var somevar
не зарегистрирован:
example.com/some-page/?somevar=hello
- WordPress игнорирует somevar
Когда Query Var somevar
зарегистрирован:
example.com/some-page/?somevar=hello
- WordPress сохраняет значение этого параметра в массиве $wp_query->query_vars
Разница между регистрацией этой переменной в WordPress заключается в том, будет ли значение сохранено в объекте WP_Query.. (оно все равно должно быть доступно через $_GET независимо от этого).
Чтобы зарегистрировать свой пользовательский query var, следует использовать:
add_filter('query_vars', 'add_my_var');
function add_my_var($public_query_vars) {
$public_query_vars[] = 'some_unique_identifier_for_your_var';
return $public_query_vars;
}
Также следите, чтобы не использовать стандартные имена query_var в WordPress - в этом случае могут возникнуть конфликты.
