Ladda alla anpassade WordPress-fält via databasfråga
När jag hämtar information från WordPress-databasen föredrar jag att undvika att använda direkta databasfrågor, men det finns tillfällen då de kan vara användbara (och det är viktigt att det görs rätt).
Ett användningsfall där det kan vara till hjälp är när du behöver hämta en uppsättning data av en enda typ. Exempel: Säg att du måste ladda alla anpassade WordPress-fält.
När detta skrivs finns det ingen funktion som jag är medveten om som kommer att göra detta, så här är hur jag frågar databasen att göra det.
Ladda alla anpassade WordPress-fält
Det finns flera saker att notera om anpassade fält som är associerade med ett givet inlägg:
- anpassade fält lagras i postens metadata,
- anpassade fält anses vara privata, så de har ett understreck före,
- WordPress-kodningsstandarderna kommer inte att gilla detta (så du kan behöva ignorera standarderna)
Du kan läsa allt om dem i Codex.
Och ja, det är lätt att få all anpassad information för ett enda inlägg. Men om du arbetar med ett projekt där du behöver hämta alla anpassade fält, nämligen de som är privata, måste du se till att du söker efter strängar som börjar med ett understreck.
Så för att ladda alla anpassade WordPress-fält i databasen, här är frågan jag använder :
<?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;
}
Några saker att notera om ovanstående fråga:
- Jag använder förberedelsefunktionen före get_results. Detta är för parametrering och säkerhet. Om det är nytt för dig rekommenderar jag att du läser den här artikeln.
- Detta returnerar alla meta-nycklar och metavärden i en array,
- Beroende på hur många poster du vill returnera kan detta ta lite tid (och bör kanske göras i omgångar).
Slutligen, för de som är nyfikna, index finns inte på kolumnen meta_value utan på meta_key-kolumnen.
Kolumnerna i Post Meta-tabellen med index.
Så om du väljer att ändra frågan och vill använda kolumner som har index, se meta_id, post_id och meta_key.