V back-office mého tématu si mohou uživatelé vybrat, které příspěvky se budou zobrazovat na titulní stránce, a mohou také zvolit v jakém pořadí se mají vybrané příspěvky zobrazit .
Takhle jsem se snažil:
$aPostsIDs = array(1,3,2); // Note the 3 should appear before the 2
query_posts(array('post_type' => 'page',
'post__in' => $aPostsIDs,
'order_by' => 'FIELD(ID, '.implode(',',$aPostsIDs).')'));
Ale podle očekávání to nefunguje. Správný způsob, jak to udělat podle kodexu je:
add_filter('posts_orderby', 'edit_posts_orderby');
function edit_posts_orderby($orderby_statement) {
global $aPostsIDs;
$orderby_statement = 'FIELD(ID, '.implode(',',$aPostsIDs).')';
return $orderby_statement;
}
Ale to ještě nefunguje! Sloupky jsou řazeny podle ID (1, 2, 3) namísto daného pořadí (1, 3, 2).
Kde bych se měl podívat? dík
Počínaje WordPress 3.5, parametr orderby
umožní hodnotu post__in
seřadit podle pořadí parametru post__in
, stejně jako ve vašem příkladu.
To nemusí být ideální čekat nebo vyžadovat 3,5+, ale to bude téměř jistě nejlepší a nejjednodušší způsob, jak dělat to, co hledáte.
Zde je relevantní trac lístek pokud chcete podrobnosti.