Carica tutti i campi personalizzati di WordPress tramite la query del database
Quando recupero informazioni dal database di WordPress, preferisco evitare di utilizzare query dirette al database, ma ci sono momenti in cui possono essere utili (ed è importante che sia fatto bene).
Un caso d’uso in cui potrebbe essere utile è quando è necessario recuperare un insieme di dati di un singolo tipo. Esempio calzante: supponiamo che tu debba caricare tutti i campi personalizzati di WordPress.
Al momento in cui scrivo, non c’è alcuna funzione di cui sono a conoscenza che lo farà, quindi ecco come interrogo il database per farlo.
Carica tutti i campi personalizzati di WordPress
Ci sono diverse cose da notare sui campi personalizzati associati a un determinato post:
- i campi personalizzati sono memorizzati nei metadati del post,
- i campi personalizzati sono considerati privati, quindi sono preceduti da un trattino basso,
- agli standard di codifica di WordPress non piacerà (quindi potresti dover ignorare gli standard)
Puoi leggere tutto su di loro nel Codex.
E sì, è facile ottenere tutte le informazioni personalizzate per un singolo post. Ma se stai lavorando a un progetto in cui devi recuperare tutti i campi personalizzati, in particolare quelli privati, devi assicurarti di eseguire query per le stringhe che iniziano con un trattino basso.
Quindi, per caricare tutti i campi personalizzati di WordPress nel database, ecco la query che utilizzo :
<?php
function get_the_custom_fields() {
global $wpdb;
$results = $wpdb->get_results(
$wpdb->prepare(
"
SELECT meta_key, meta_value
FROM $wpdb->postmeta
WHERE meta_key REGEXP '%s'
", '^[_]') );
return $results;
}
Alcune cose da notare sulla query di cui sopra:
- Sto usando la funzione prepare prima di get_results. Questo è per la parametrizzazione e la sicurezza. Se è nuovo per te, ti consiglio di leggere questo articolo.
- Questo restituisce tutte le meta chiavi e i meta valori in un array,
- A seconda del numero di record che desideri restituire, l’operazione potrebbe richiedere del tempo (e forse dovrebbe essere eseguita in batch).
Infine, per chi è curioso, gli indici non esistono nella colonna meta_value ma nella colonna meta_key.
Le colonne nella tabella Post Meta con indici.
Pertanto, se si sceglie di modificare la query e si desidera utilizzare colonne con indici, fare riferimento a meta_id, post_id e meta_key.