La funzione get_query_var non funziona affatto

28 giu 2013, 11:34:36
Visualizzazioni: 28.5K
Voti: 6

Sì, ci sono alcuni argomenti simili su questa funzione, get_query_var('paged') restituisce lo stesso risultato

l'ordinamento dei post del blog non funziona usando get_query_var

Sto usando wordpress3.5, ho il mio proprio sistema basato su php mysql, e ho bisogno di integrare una funzione blog, e mi serve solo elencare gli ultimi post su un file php separato ordinati per data del post. Fondamentalmente, i miei requisiti sono semplici:

elencare tutti i post su un file php, supponiamo che questo file si chiami blog_show.php

Poiché userò le API di WordPress all'esterno di WordPress, devo prima importare WordPress, puoi trovare il modo qui Integrazione di WordPress con i tuoi siti

Ecco una parte del mio 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'    => __('« Precedente'),
    'next_text'    => __('Successivo »')
);
$lateset_posts_paging = paginate_links($paging_args);

Va tutto bene, posso usare

$lateset_posts = new WP_Query($query_args);

per trovare i post che voglio. Ma non posso usare

get_query_var('p')

Ottengo sempre lo stesso valore. E ho scoperto che anche se dichiaro wp_query come globale, non può essere ancora utilizzato, quasi tutti i campi di wp_query sono null.

Poiché get_query_var('p') e $wp_query non possono essere utilizzati, anche la mia paginazione non può essere utilizzata.

Come puoi vedere, la variabile p viene utilizzata solo in due punti

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

e

$paging_args = array(
        'base'         => '%_%',
        'format'       => '?p=%#%', //P qui
        'total'        => 10,
        'current'      => $current_page,
        'end_size'     => 1,
        'mid_size'     => 1,
        'prev_next'    => True,
        'prev_text'    => __('« Precedente'),
        'next_text'    => __('Successivo »')
    );

Ho fatto una prova, anche se ho cambiato p in paged o qualsiasi altra cosa, ottengo ancora lo stesso errore.

Dove ho sbagliato, ho bisogno di richiedere alcuni file php extra? Grazie.

2
Commenti

Hai registrato la variabile p come query_var da qualche parte nel tuo codice? La query_var predefinita per la paginazione è paged.

Krzysiek Dróżdż Krzysiek Dróżdż
28 giu 2013 11:38:58

@KrzysiekDróżdż Ho usato p in due punti, come vedi paged' => get_query_var('p') e 'format' => '?p=%#%'. Dove dovrei registrarla?

diligent diligent
28 giu 2013 11:46:25
Tutte le risposte alla domanda 1
0
19

WordPress non aggiunge automaticamente tutti i parametri della query string (parametri $_GET) come query_var.

Quando la Query Var somevar non è registrata: example.com/some-page/?somevar=hello - WordPress ignora somevar

Quando la Query Var somevar è registrata: example.com/some-page/?somevar=hello - WordPress memorizza il valore di questo parametro nell'array $wp_query->query_vars

La differenza tra registrare quella variabile con WordPress è se il valore viene memorizzato nell'oggetto WP_Query.. (dovrebbe comunque essere disponibile via $_GET indipendentemente).

Per registrare la tua query var personalizzata, dovresti usare:

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

Inoltre fai attenzione a non usare nomi di query_var predefiniti di WordPress - probabilmente otterrai alcuni conflitti in quel caso, immagino.

28 giu 2013 11:56:40