WordPress: listează custom fields într-un mod… custom
Custom fields (CF) sunt o modalitate excelentă de a realiza lucruri mărețe și de a ajunge pe nebănuite culmi ale gloriei personale. Ok, poate nici chiar așa, dar… Pe acolo.
Cu toate astea, WordPress nu oferă prea multe funcții utile pentru CF. Avem câteva funcții meta-related, dar toate funcțiile sunt prea… generice. Să zicem că faci un sistem de filtrare – cum fac eu – și pui totul în CF (pentru că vrei să faci o… filtrare un pic mai târziu). Tot ce are legătură cu filtrele respective pui la modul _custom_filters_NUME_FILTRU. (dacă primul caracter este underscore, custom field-ul nu este afișat în admin)
Cum poți lua CF ce încep cu _custom_filters?
Varianta cu funcțiile WordPress (documentate)
Luăm toate CF pentru postul curent, facem un foreach, verificăm dacă prefixul este cel dorit și ne facem treaba.
$prefix = '_custom_filters';
$custom_fields = get_post_custom($post_id);
foreach( $custom_fields as $custom_field ){
if( substr( $custom_field, 0, strlen($prefix) ) == $prefix ){
// do some awesome thing with my custom field code
}
}
Varianta geek-ish
Facem un query în baza de date și luăm fix ce ne trebuie.
function get_my_post_meta( $post_id = null, $meta_prefix = '' ){
if( !isset( $post_id ) ){ return; }
global $wpdb;
return $wpdb->get_results( $wpdb->prepare("
SELECT meta_key, meta_value, meta_id, post_id
FROM $wpdb->postmeta
WHERE
post_id = %d AND
meta_key LIKE %s
ORDER BY meta_key, meta_id", $post_id, $meta_prefix.'%') );
} // get_my_post_meta
$custom_fields = get_my_post_meta( $post_id, '_custom_filters' );
foreach( $custom_fields as $custom_field ){
// do some awesome thing with my custom field code
}
Atenție!
Această funcție NU folosește caching. Ceea ce înseamnă că ar ptea avea efecte… nedorite în cazul unui site cu mulți utiilzatori.
Nu am prezentat o metodă de cacheing deoarece eu am avut nevoie de această funcție strict pe partea de administrare. Dacă ai nevoie de o astfel de funcție pe partea de client, caută mai multe detalii aici sau lasă un comentariu la acest post.
- Posted in:
- WordPress
- Tags:
- WordPress tricks


Poate n-am ințeles bine problema, dar ‘_custom_filters’ astea nu ar fi mai elegant implementate ca taxonomy?
@Dan: Ba da. Chiar taxonomy a fost prima mea opțiune.
Doar că eu am de făcut mai multe cu ele și îmi este mult mai comod așa decât taxonomy.