Wordpress: ordinare una serie di post per un campo qualsiasi

lunedì 23 marzo, 2009

La tecnica che illustro qui è utile in molte situazioni dove, ad esempio, abbiamo un array di array o un array di oggetti. In Wordpress può capitare di dover manipolare un elenco di post, nel formato standard di array di stdClass Object, senza aver accesso alla select originale (sul database) che ha generato l'elenco (array) stesso:

CODE:
  1. Array
  2. (
  3.     [0] => stdClass Object
  4.         (
  5.             [ID] => 104
  6.             [post_author] => 37
  7.     ...

È possibile tuttavia ordinare un tale array in un momento successivo, senza passare per il database, sfruttando la funzione php usort(). Questa permette di eseguire un ordinamento tramite una funzione callback personale. Ad esempio immaginiamo di voler ordinare i nostri post per post_author o per un qualsiasi altro campo che, a sua volta, può essere un array o un altro stdClass Object:

PHP:
  1. /**
  2.  * $posts è il nostro array di oggetti "post" stdClass Object
  3.  */
  4. usort( $posts, "__sort" );
  5.  
  6. function __sort( $a, $b ) {
  7.     if( $a->post_author == $b->post_author ) return 0;
  8.     return ($a->post_author> $b->post_author) ? -1 : 1;   // decrescente
  9.     // return ($a->post_author <$b->post_author) ? -1 : 1;   // crescente
  10. }

Giocando sul maggiore ">" e minore "<" dell'ultima istruzione è possibile ordinare in modo decrescente o crescente.

Queste situazioni possono essere molto frequenti in contesti avanzati dove, ad esempio, si hanno una serie di elenchi da sottoporre a scansione. Un altro esempio è nel caso di aggregazioni, dove più liste di post, recuperati al limite da blog diversi, devono essere ordinate.

PHP:
  1. array_push( $posts, $lista_1, $lista_2, $lista_3, ..., $lista_n );
  2. /**
  3.  * $posts è un array di liste, elenchi di post recuperati chissà
  4.  * dove e chissà come...
  5.  */
  6. usort( $posts, "__sort" );
  7.  
  8. function __sort( $a, $b ) {
  9.     if( $a->ID == $b->ID ) return 0;
  10.     return ($a->ID <$b->ID) ? -1 : 1;
  11. }

Post correlati

Questo articolo ti è stato utile?: Per nientePocoAbbastanzaMoltoMoltissimo
Loading ... Loading ...

Non ci sono commenti per questo Post

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre>         // blocco generico
[code][/code]       // blocco generico
[as][/as]           // Actionscript
[css][/css]         // CSS Style Sheet
[html][/html]       // HTML
[js][/js]           // Javascript
[objc][/objc]       // Objective-C
[php][/php]         // PHP
[sql][/sql]         // SQL