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.

2 Comentarii to “WordPress: listează custom fields într-un mod… custom”

  1. Poate n-am ințeles bine problema, dar ‘_custom_filters’ astea nu ar fi mai elegant implementate ca taxonomy?

  2. Staicu Ionuț-Bogdan

    @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.

Show trackbacks

Ți-a plăcut articolul? Lasă un comentariu!

You can insert code snippets using BBcode:
[js].[/js] [html].[/html] [php].[/php] [css].[/css]
You can also use some HTML tags:
<blockquote>.</blockquote> <code>.</code> <a href="">.</a> <strong>.</strong> <em>.</em>

windows apple dropbox facebook twitter