Cum să folosești meta_query pentru a verifica dacă un câmp meta are o valoare setată?

16 dec. 2015, 23:12:28
Vizualizări: 19.4K
Voturi: 3

(WordPress 4.3.1)

Rulez o buclă personalizată și vreau să includ doar postările care au un fișier încărcat într-un câmp personalizat: audio_file.

Am încercat multe soluții de pe internet și până acum nimic nu funcționează.

Pot folosi meta_query pentru a verifica dacă o cheie are o valoare?

Iată încercarea mea curentă:

global $post;      

$args = array(
   'post_type'      => array (
                       'podcast',
                       'event',
                       ),
   'posts_per_page' => 10,
   'post_status'    => 'publish',     
   'paged'          => get_query_var( 'paged' ),
   'meta_query'     => array (
                           'key' => 'audio_file',
                           'value' => '' ,
                           'compare' => '!=',
                           //'type'    => 'date',
                            ),
   );

   global $wp_query;

   $wp_query = new WP_Query( $args );

   if ( have_posts() ) { while ( have_posts() ) { the_post(); 

Rezultatul dorit aici este să afișez postările unde 'audio_file' nu este gol.

Mulțumesc. (WordPress 4.3.1)

1
Comentarii

De asemenea, actualizarea WP la cea mai recentă versiune este întotdeauna o idee bună din punct de vedere al securității (mai ales dacă alți oameni au testat-o și au dovedit că este sigură și nu strică site-urile sau plugin-urile tuturor).

N00b N00b
17 dec. 2015 01:47:35
Toate răspunsurile la întrebare 4
0

Am înțeles, meta_query trebuie să fie un array în interiorul unui array, deoarece este destinat pentru interogări complexe folosind 'relation'.

meta_query => array (
    array (
        //'relation' => 'OR',
        'key' => 'audio_file', //Câmpul de verificat.
        'value' => '', //Valoarea câmpului.
        'compare' => '!=', //Condiția folosită pentru valoare.
    ),  
),

Condiția '!=' (diferit de) '' (null) returnează true dacă un fișier a fost încărcat.

17 dec. 2015 02:25:08
0

Aceasta ar putea ajuta pe cineva. Codul va căuta o valoare meta, dacă există și nu este goală.

'meta_query' => [
    'relation' => 'AND',
    [
        'key'     => 'your_key',
        'compare' => 'EXISTS',
    ],
    // Nu dorim valori goale
    [
        'key'     => 'your_key',
        'value'   => '',
        'compare' => '!=',
    ],
],
29 iun. 2020 14:26:08
2

Pot folosi meta_query pentru a verifica dacă o cheie are o valoare?

Orice valoare? Folosește EXISTS

'meta_query'     => array (
                        'key' => 'audio_file',
                        'value' => '' ,
                        'compare' => 'EXISTS',
                        'type'    => 'date',
                         ),
);

Nu știu de ce fișierul tău încărcat ar fi de tip date. M-aș aștepta să fie binary sau poate char

16 dec. 2015 23:33:49
Comentarii

Corect... am ratat asta dintr-o încercare anterioară de a detecta câmpul de dată. Poate că 'type' nu este necesar oricum... Am încercat EXISTS și fără succes...

AJD AJD
16 dec. 2015 23:58:07

Da, poate că nu este necesar deloc

s_ha_dum s_ha_dum
17 dec. 2015 00:02:38
0

Se pare că tipul valorii este esențial acum. Nu am reușit să fac interogarea meta să funcționeze corect fără a utiliza tipul. Mai ales când verificăm existența valorii.

Acest cod nu funcționează acum.

'meta_query' => array(
    'relation' => 'AND',
    array(
        'key'     => 'meta_key',
        'value'   => '',
        'compare' => '!=',
    ),
),

Acesta funcționează.

'meta_query' => array(
    'relation' => 'AND',
    array(
        'key'     => 'meta_key',
        'value'   => '',
        'compare' => '!=',
        'type' => 'NUMERIC'
    ),
),

Singura diferență este tipul.

4 dec. 2021 14:11:02