web-dev-qa-db-fra.com

Comment commander par post_status?

J'utilise get_posts() comme ceci:

$posts = get_posts(array('orderby' => 'post_status'))

ce qui n'est pas possible car ce n'est pas dans les clés autorisées dans la méthode parse_orderby()

Comment contourner cette limitation?

5
Xaver

Vous pouvez utiliser 'posts_orderby' filter pour modifier le code SQL exécuté.

Notez que:

  • en utilisant get_posts(), vous devez définir l'argument 'suppress_filters' de false pour que le filtre soit exécuté
  • si vous ne définissez pas explicitement 'post_status', vous n'obtiendrez que des publications (donc rien à commander)

Exemple de code:

$filter = function() {
  return 'post_status ASC';
};

add_filter('posts_orderby', $filter);

$posts = get_posts('post_status' => 'any', 'suppress_filters' => false);

remove_filter('posts_orderby', $filter);
8
gmazzap