web-dev-qa-db-fra.com

Travailler avec query_posts (tableaux et chaînes de requête)

J'essaie d'utiliser la requête de recherche avec un tableau d'arguments pour affiner les résultats de la recherche, mais j'échoue terriblement. C'est ce que j'ai jusqu'ici.

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;          

$query_string = 's=test&category=wordpress'      

$s_array = array(
    'post_type' => 'blog',
    'caller_get_posts' => 1, 
    'paged' => $paged, 
    'meta_query' => array(
        array(
            'key' => 'votes_percent',
            'value' => '50',
            'compare' => '>',
            'type' => 'numeric',
        )
    )
);
$s_query = http_build_query($s_array);
$is_query = '&' . $s_query;
$s_streaming = $query_string . $is_query;  
query_posts($s_streaming);

En faisant écho à $ s_streaming, je reçois

s=test&category=wordpress&post_type=blog&caller_get_posts=1&paged=1&meta_query%5B0%5D%5Bkey%5D=votes_percent&meta_query%5B0%5D%5Bvalue%5D=50&meta_query%5B0%5D%5Bcompare%5D=%3E&meta_query%5B0%5D%5Btype%5D=numeric

Si je supprime les clés meta_query cela fonctionne, donc je suppose que c'est là que réside mon problème.

Ça marche bien comme ça

query_posts($s_array); //just using the array to filter

query_posts($query_string); //just using the search query
//$query_string = 's=test&category=wordpress';

J'essaie de construire la chaîne à interroger, car cela échoue.

query_posts($query_string . $s_array); //using both

Est-ce que quelqu'un peut-il me montrer la bonne direction?

1
TimothyJr

Je suggérerais de ne pas utiliser $query_string pour simplifier les choses. Si vous utilisez un tableau, conservez le formulaire tableau pour les variables de requête:

global $wp;
$paged = ((int)get_query_var('paged')) ? (int)get_query_var('paged') : 1;
$s_array = array(
    'post_type' => 'blog',
    'caller_get_posts' => 1,
    'paged' => $paged,
    'meta_query' => array(
        array(
            'key' => 'votes_percent',
            'value' => '50',
            'compare' => '>',
            'type' => 'numeric',
        )
    )
);
$new_query = array_merge( $s_array, (array)$wp->query_vars );
query_posts($new_query);
2
John P Bloch

Si vous essayez de combiner $query_string et $s_array, essayez ceci ...

<?php

    //We use values of 's' and 'category' to add values to $s_array
    $query_string = 's=test&category=wordpress';

    $s_array = array(
        'post_type' => 'blog',
        'caller_get_posts' => 1, 
        'paged' => $paged, 
        'meta_query' => array(
        array(
            'key' => 'votes_percent',
            'value' => '50',
            'compare' => '>',
            'type' => 'numeric',
            )
        ),
        's' => 'test',
        'category' => 'wordpress'
    );

    //Use $s_array for query_posts directly
    query_posts($s_array);
?>

Je suppose que ça va marcher ...

0
Rutwick Gangurde