WP_Query avansat cu meta_query și orderby
Mă întreb dacă mă poate ajuta cineva cu acest query complex pentru ACF.
Până acum am următoarea structură care ar trebui să afișeze:
Pagini,
Articole de Știri,
Articole Despre și
Articole Implicate.
Afișează: doar 4.
Afișează doar dacă: câmpul ACF/Meta Key 'home_page' este setat pe 'yes'
ȘI
Ordonează după valoarea numerică a câmpului ACF/Meta Key 'home_order' adică 1,2,3 primul, al doilea, al treilea etc
$args = array(
// Tipurile de postări
'post_type' => array( 'page', 'news-articles', 'about-articles','involved-articles' ),
'showposts' => 4,
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'home_page',
'value' => 'yes',
'compare' => 'IN',
),
array(
'orderby' => 'meta_value_num',
'meta_key' => 'home_order',
),
),
);
Cred că ceva nu este în regulă cu 'compare' și 'relation'

Ar trebui să citești cu adevărat documentația despre meta_query
Iată ce este permis într-un meta_query
key (string) - Cheia câmpului personalizat.
value (string|array) - Valoarea câmpului personalizat. Poate fi un array doar când compare este
'IN'
,'NOT IN'
,'BETWEEN'
sau'NOT BETWEEN'
. Nu este necesar să specificați o valoare când utilizați comparațiile'EXISTS'
sau'NOT EXISTS'
în WordPress 3.9 și versiuni ulterioare.(Notă: Din cauza bug-ului #23268, valoarea este necesară pentru ca comparațiile
NOT EXISTS
să funcționeze corect înainte de versiunea 3.9. Trebuie să furnizați un șir de caractere pentru parametrul value. Un șir gol sauNULL
NU va funcționa. Cu toate acestea, orice alt șir de caractere va funcționa și NU va apărea în interogarea SQL atunci când utilizațiNOT EXISTS
. Ai nevoie de inspirație? Ce zici de 'bug #23268'.)compare (string) - Operatorul de testat. Valorile posibile sunt
'='
,'!='
,'>'
,'>='
,'<'
,'<='
,'LIKE'
,'NOT LIKE'
,'IN'
,'NOT IN'
,'BETWEEN'
,'NOT BETWEEN'
,'EXISTS'
și'NOT EXISTS'
. Valoarea implicită este'='
.type (string) - Tipul câmpului personalizat. Valorile posibile sunt
'NUMERIC'
,'BINARY'
,'CHAR'
,'DATE'
,'DATETIME'
,'DECIMAL'
,'SIGNED'
,'TIME'
,'UNSIGNED'
. Valoarea implicită este'CHAR'
.
Ordonarea trebuie să aibă loc în afara meta_query
-ului tău. Poți încerca următoarele
$args = [
'post_type' => ['page', 'news-articles', 'about-articles', 'involved-articles'],
'posts_per_page' => 4,
'meta_key' => 'home_order',
'orderby' => 'meta_value_num',
'meta_query' => [
[
'key' => 'home_page',
'value' => 'yes',
]
],
];
Note adiționale:
Începând cu PHP 5.4 poți folosi sintaxa scurtă pentru array, adică poți folosi
[]
în loc dearray()
. Dacă încă rulezi orice versiune anterioară PHP 5.6, ar trebui să iei în serios în considerare actualizarea.showposts
a fost înlocuit cuposts_per_page
, așa că este mai bine să foloseștiposts_per_page

@birgire mulțumesc, da, a fost o greșeală rapidă de copy-paste ;-)

$args = array(
'posts_per_page' => 4,
'post_type' => array( 'page', 'news-articles', 'about-gorilla','involved' ),
'orderby' => 'meta_value_num',
'meta_key' => 'home_order',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'home_page',
'value' => 'yes',
'compare' => '=',
),
),
);
