Obține toate produsele cu un atribut personalizat

29 iun. 2015, 10:46:31
Vizualizări: 14.1K
Voturi: 5

Vreau să fac o interogare personalizată pentru a obține toate produsele cu un atribut specific ("demo" în cazul meu). Interogarea pe care vreau să o returneze arată astfel:

a:5:{s:4:"demo";
a:6:{s:4:"name";
    s:4:"DEMO";
    s:5:"value";
    s:366:"LINK TO DEMO";
    s:8:"position";
    s:1:"0";
    s:10:"is_visible";
    i:0;
    s:12:"is_variation";
    i:0;
    s:11:"is_taxonomy";
    i:0;
}

}

Nu știu cum să creez $args pentru a obține produsele. Vreau ca $args să arate cam așa:

    $args = array ( 
         'meta_query' => array( 
             array( 
              'key' => 'meta_value', 
              'value' => 'demo', 
              'compare' => 'LIKE', ), 
           ), 
   );

Mulțumesc!

0
Toate răspunsurile la întrebare 4
6

Ai scris key ca meta_value. Ar trebui să fie numele meta-ului tău. Numele pe care l-ai dat câmpurilor personalizate sau meta-urilor. Apoi folosește următoarea interogare.

$args = array ( 
         'post_type'  => 'your-post-type',
         'posts_per_page'  => -1,
         'meta_query' => array( 
             array( 
              'key' => 'demo', 
              'value' => '',
              'compare' => '!='
             ), 
           ), 
   );

Implicit, compare este setat la =

29 iun. 2015 10:57:48
Comentarii

Mulțumesc, vreau să obțin toate produsele care au un atribut numit 'demo', nu vreau să obțin valoarea deoarece câmpul de valoare va fi un link. Oricum, mulțumesc!

C.B. C.B.
29 iun. 2015 11:37:49

@user2879109 Am actualizat codul. Te rog verifică.

Karun Karun
29 iun. 2015 11:49:05

Nu, am încercat și nu funcționează pentru mine. În wp_postmeta.meta_value am asta:

a:5:{ s:4:"demo"; a:6:{s:4:"name"; s:4:"DEMO"; s:5:"value"; s:366:"LINK TO DEMO"; s:8:"position"; s:1:"0"; s:10:"is_visible"; i:0; s:12:"is_variation"; i:0; s:11:"is_taxonomy"; i:0; } ... mai multe atribute }

C.B. C.B.
29 iun. 2015 12:06:45

în oricare dintre postările tale unde ai acea cheie demo. Poți să faci un get_post_meta(get_the_ID()); și să afișezi array-ul returnat.

Karun Karun
29 iun. 2015 12:14:23

Am reușit, mulțumesc pentru ajutor!! Am scris codul de mai jos

C.B. C.B.
29 iun. 2015 12:20:46

meta_key care stochează atributele woocommerce este '_product_attributes'. Totuși, nu există o modalitate specifică de a căuta produse bazate pe atribute personalizate ale produsului.

gmatta gmatta
17 aug. 2016 09:27:53
Arată celelalte 1 comentarii
1

OK, AM REUȘIT!! uraaa!

Mulțumesc mult tuturor!!

Am asta:

$args = array ( 
     'post_type'  => 'product',
     'posts_per_page'  => -1,
     'meta_query' => array( 
         array( 
          'value' => 'demo', 
          'compare' => 'like'
         ), 
       ),
     ); 

Ei bine, asta funcționează cel puțin pentru mine

Mulțumesc mult!!

Cele mai bune urări!

29 iun. 2015 12:13:40
Comentarii

Doar pentru cineva care caută o soluție similară, acest cod nu va funcționa în majoritatea cazurilor. Este posibil să fi funcționat într-o situație specifică.

gmatta gmatta
17 aug. 2016 09:26:28
4

încearcă ceva de genul acesta

$args = array(
    "post_type" => "product",
    "meta_query" => array(
        array(
            "key"     => "demo",
            "value" => "abc",
            "compare" => "EXISTS",
        ),
    ),
);
$query = new WP_Query( $args );
29 iun. 2015 10:56:43
Comentarii

Mulțumesc, dar încă primesc 0 rezultate

C.B. C.B.
29 iun. 2015 11:36:06

adaugă "value" => "abc", lângă "key" și "compare". documentația menționează un posibil bug dar nu e clar dacă ai nevoie de "value" sau nu (am modificat codul de mai sus)

mmm mmm
29 iun. 2015 12:02:05

Am înțeles, codul tău și cel al lui karun au fost de mare ajutor! Mulțumesc.

C.B. C.B.
29 iun. 2015 12:19:06

meta_key care stochează atributele WooCommerce este '_product_attributes'. Totuși, nu există o modalitate specifică de a căuta produse pe baza atributelor personalizate ale produsului.

gmatta gmatta
17 aug. 2016 09:31:12
0

Știu că asta este veche, dar SQL direct, iată soluțiile mele:

Obțineți toate metadatele pentru un produs:

SELECT meta_key, meta_value FROM wp_postmeta WHERE wp_postmeta.post_id = 626

Obțineți produse cu metadate specifice

SELECT p.id, p.post_title, m.meta_key, m.meta_value FROM wp_posts p 
INNER JOIN wp_postmeta m ON p.id=m.post_id AND m.meta_key='_auction_dates_to'

ADAUGĂ PENTRU A OBȚINE METADATE PENTRU UN PRODUS SPECIFIC

AND p.id=626

Adaugă pentru a obține o valoare meta specifică

AND m.meta_value='today'
14 dec. 2018 16:56:58