Funcția get_query_var nu funcționează deloc

28 iun. 2013, 11:34:36
Vizualizări: 28.5K
Voturi: 6

Da, există câteva subiecte similare despre această funcție, get_query_var('paged') returnează același rezultat

sortarea articolelor de blog nu funcționează când folosim get_query_var

Folosesc wordpress3.5, am propriul meu sistem bazat pe php mysql, și trebuie să integrez o funcție de blog, și am nevoie doar să listez ultimele articole într-un fișier php separat ordonate după data postării. Practic, cerințele mele sunt simple:

listează toate articolele într-un fișier php, să zicem că acest fișier se numește blog_show.php

Pentru că voi folosi API-ul wordpress în afara wordpress, trebuie să import wordpress mai întâi, puteți găsi modalitatea de aici Integrarea Wordpress cu site-urile tale

Iată o parte din 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'    => __('« Anterior'),
    'next_text'    => __('Următor »')
);
$lateset_posts_paging = paginate_links($paging_args);

Totul este în regulă, pot folosi

$lateset_posts = new WP_Query($query_args);

pentru a găsi articolele pe care le doresc. Dar nu pot folosi

get_query_var('p')

Primesc mereu aceeași valoare. Și am descoperit că chiar dacă declar wp_query ca global, tot nu poate fi folosit, aproape toate câmpurile din wp_query sunt null.

Din cauză că get_query_var('p') și $wp_query nu pot fi folosite, nici paginarea mea nu poate fi folosită.

După cum vedeți, variabila p este folosită doar în două locuri

$current_page = (get_query_var('p')) ? get_query_var('p') : 1;
$query_args = array(
       //ceva
       'paged' => $current_page,
    );

și

$paging_args = array(
        'base'         => '%_%',
        'format'       => '?p=%#%', //P este aici
        'total'        => 10,
        'current'      => $current_page,
        'end_size'     => 1,
        'mid_size'     => 1,
        'prev_next'    => True,
        'prev_text'    => __('« Anterior'),
        'next_text'    => __('Următor »')
    );

Am făcut un test, chiar dacă am schimbat p în paged sau orice altceva, tot primesc aceeași eroare.

Unde greșesc, trebuie să includ niște fișiere php suplimentare? Mulțumesc.

2
Comentarii

Ai înregistrat variabila p ca query_var în codul tău? Variabila implicită pentru paginare este paged.

Krzysiek Dróżdż Krzysiek Dróżdż
28 iun. 2013 11:38:58

@KrzysiekDróżdż Am folosit p în două locuri, cum vezi 'paged' => get_query_var('p') și 'format' => '?p=%#%'. Unde ar trebui să o înregistrez?

diligent diligent
28 iun. 2013 11:46:25
Toate răspunsurile la întrebare 1
0
19

WordPress nu adaugă automat toți parametrii din șirul de interogare (parametrii $_GET) ca query_var.

Când variabila de interogare somevar nu este înregistrată: example.com/some-page/?somevar=hello - WordPress ignoră somevar

Când variabila de interogare somevar este înregistrată: example.com/some-page/?somevar=hello - WordPress stochează valoarea acestui parametru în array-ul $wp_query->query_vars

Diferența dintre înregistrarea acelei variabile în WordPress este dacă valoarea este stocată în obiectul WP_Query (valoarea ar trebui să rămână disponibilă prin $_GET indiferent de înregistrare).

Pentru a înregistra variabila personalizată de interogare, ar trebui să folosești:

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;
}

De asemenea, ai grijă să nu folosești nume de query_var implicite din WordPress - probabil vei avea conflicte în acest caz, cred.

28 iun. 2013 11:56:40