Функция get_query_var совсем не работает

28 июн. 2013 г., 11:34:36
Просмотры: 28.5K
Голосов: 6

Да, есть похожие темы об этой функции, 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 файлы? Спасибо.

2
Комментарии

Вы зарегистрировали переменную p как query_var где-то в вашем коде? По умолчанию query_var для пагинации — это paged.

Krzysiek Dróżdż Krzysiek Dróżdż
28 июн. 2013 г. 11:38:58

@KrzysiekDróżdż Я использовал p в двух местах: как видите, 'paged' => get_query_var('p') и 'format' => '?p=%#%'. Где мне ее зарегистрировать?

diligent diligent
28 июн. 2013 г. 11:46:25
Все ответы на вопрос 1
0
19

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 - в этом случае могут возникнуть конфликты.

28 июн. 2013 г. 11:56:40