meta_compare non confronta l'intero numero intero

1 apr 2014, 09:18:37
Visualizzazioni: 4.43K
Voti: 0

Ho inviato un dato intero tramite un modulo alla mia pagina di ricerca personalizzata. Posso ottenere i valori correttamente se l'input è un singolo carattere (es. 1) ma se l'input è multi-carattere (es. 100) continua a confrontare solo con "1".

SE l'input dell'utente è 1 ottengo tutti i post con valore del campo personalizzato Maggiore di 1. Ma se l'input è 100 il risultato è lo stesso.

Perché succede questo??

Ecco il mio codice:

$i_rate = $_GET["interest_rate"];

                $bc_args = array(

                    'post_type' => 'data',
                    'data-category'=>'insurance-rate',
                    'order' => 'DESC',
                    'meta_key' => 'interest_rate',
                    'meta_value' =>$i_rate,
                    'meta_compare' => '>=',
                    'orderby' => 'meta_value_num',

                );

                 $sortedPosts = new WP_Query($bc_args);
3
Commenti

Non dovrebbe essere 'meta_value' =>$i_rate, sostituito con 'meta_value_num' =>$i_rate,

User User
1 apr 2014 12:55:08

@magenta Ho provato anche quello... ma non funziona in quel modo

rafsuntaskin rafsuntaskin
1 apr 2014 11:15:33

Stavo per suggerire di convertire in INT il tuo valore, ma sembra che la risposta selezionata ti abbia già aiutato.. :)

t31os t31os
1 apr 2014 11:30:53
Tutte le risposte alla domanda 1
2
10

Potresti provare questo invece:

$bc_args = array(
    'post_type'      => 'data',
    'data-category'  =>'insurance-rate',
    'order'          => 'DESC',
    'orderby'        => 'meta_value_num',
    'meta_query' => array(
        array(
            'key'     => 'interest_rate',
            'value'   => (int) $i_rate,
            'type'    => 'numeric',
            'compare' => '>='
        ),
    )
);

$sortedPosts = new WP_Query( $bc_args );

dove utilizziamo il numeric type.

Dovresti anche considerare l'uso di filter_input invece di $_GET:

$i_rate = filter_input( INPUT_GET, 'i_rate', FILTER_SANITIZE_NUMBER_INT );

oppure il metodo nativo add_query_var / get_query_var.

Ps: data-category non è un parametro nativo nella classe WP_Query().

1 apr 2014 09:48:49
Commenti

Grazie mille... ha funzionato esattamente come avevo bisogno... Sapevo che c'era qualche tipo di problema di casting ma non sapevo come risolverlo.

Grazie

rafsuntaskin rafsuntaskin
1 apr 2014 11:04:58

Felice di sapere che ha funzionato per te. Puoi sempre verificare l'SQL generato con echo $sortedPosts->request; per assicurarti che sia quello che desideri.

birgire birgire
1 apr 2014 11:07:43