web-dev-qa-db-fra.com

la fonction get_query_var ne fonctionne pas du tout

Oui, il existe des sujets similaires sur cette fonction, get_query_var ('paged') donnant le même résultat

Le tri des articles de blog ne fonctionne pas avec get_query_var

J'utilise wordpress3.5, mon système own php est basé sur mysql et je dois intégrer une fonction de blog. Il me suffit de répertorier le latest posts sur un fichier php seprate oreder by post-date. Fondamentalement, mes exigences sont simples:

list all of posts on a php file, suppose this file's name is blog_show.php

Parce que je vais utiliser l’API de wordpress, en dehors de wordpress, j’ai besoin d’importer wordpress d’abord, vous pouvez trouver le chemin à partir d’ici Intégration de Wordpress avec vos sites

Voici quelques unes de mes 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'    => __('« Previous'),
    'next_text'    => __('Next »')
);
$lateset_posts_paging = paginate_links($paging_args);

Tout va bien, je peux utiliser

$lateset_posts = new WP_Query($query_args);

pour trouver les messages que je veux. Mais je ne peux pas utiliser

get_query_var('p')

J'ai toujours la même valeur. Et j'ai même trouvé que je déclarais que wp_query était appréciable, il ne peut toujours pas être utilisé, presque tous les champs de wp_query sont null.

Étant donné que get_query_var('p') et $wp_query ne peuvent pas être utilisés, ma pagnation est également impossible.

Comme vous le voyez, les var p ne sont utilisés qu’à deux endroits

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

et

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

J'ai un test, même si j'ai changé p en paged ou anything else, j'obtiens toujours la même erreur.

Où est-ce que je me trompe, ai-je besoin de fichiers php supplémentaires? Merci.

4
diligent

WordPress n'ajoute pas automatiquement tous les paramètres de chaîne de requête ($ _GET params) sous la forme query_vars.

Lorsque Query Var somevar n'est pas enregistré: example.com/some-page/?somevar=hello - WordPress ignore un mot

Lorsque Query Var somevar est enregistré: example.com/some-page/?somevar=hello - WordPress stocke la valeur de ce paramètre dans le tableau $ wp_query-> query_vars

La différence entre enregistrer cette variable avec WordPress est de savoir si la valeur est stockée dans l'objet WP_Query .. (elle devrait quand même être disponible via $ _GET).

Pour enregistrer votre variable de requête personnalisée, vous devez utiliser:

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

Veillez également à ne pas utiliser les noms WordPress query_var par défaut - vous aurez probablement des conflits alors, je suppose.

11
Krzysiek Dróżdż