Otsige postituste metaandmeid WordPressi administraatorialas
Kui olete WordPressiga pikemat aega töötanud, on tõenäoline, et olete mingil määral töötanud ka postituste metaandmetega. Võib-olla olete lihtsalt andmebaasist metaandmeid lugenud või olete nii andmebaasi tabelisse kirjutanud kui ka sealt lugenud.
See võib olla tõeliselt võimas API, kui peate oma postitustega (või kui soovite asju veelgi rohkem abstraktselt võtta, siis oma mudelitega) seostama teatud teavet.
Sellegipoolest, mis juhtub siis, kui soovite kaasata teavet metaandmete tabelist, kuid teil pole pistikprogrammide (nt SearchWP või Relevanssi) mugavust ?
Lisaks oletagem, et kasutusjuhtum on mõeldud ainult administraatoritele ja ainult WordPressi haldusala jaoks. See tähendab, et soovite otsida oma postitusi ekraanilt Kõik postitused, kuid soovite lisada otsingukriteeriumidesse ka postituse metaandmed.
Mis siis?
Otsi postituse metaandmetest
Kui otsite kastist väljas postitusi WordPressi haldusalas, otsib see fraasi postituse pealkirjast, postituse väljavõttest ja postituse sisust ning seejärel tagastab need tulemused.
Seega, et laiendada otsingut postituste metaandmetega, peame värskendama käivitatavat päringut nii, et see hõlmaks postituste metaandmete tabeleid. Kuid siin on midagi enamat. Täpsemalt, suurima paindlikkuse ja parima kasutuskogemuse tagamiseks soovite teha järgmist.
- kaasake fraasi osi, et see ei otsiks artiklist sõna-sõnalt midagi,
- ja loomulikult käsitlege õigesti juhtumit, kui otsingusõna pole sisestatud, nii et ekraani Kõik postitused saaks endiselt vaadata selle standardvormingus.
See tähendab, et me ei pea mitte ainult muutma otsingupäringut nii, et see sisaldaks metavõtit ja metaväärtust, vaid peame ka terveid fraase õigesti vältima, et saaksime operatsiooni või operatsiooni LIKEasemel kasutada toimingut.IN``=
Mõned asjad, mida on oluline teada enne selle artikli ülejäänud osa lugemist, on järgmised:
- WP_päring
- Posts_where konks _
- Pre_get_posts konks _
- Regulaaravaldised koos preg_replace
- WordPressi abifunktsioonid, nimelt esc_sql.
Lõppkokkuvõttes peame kasutama kahte konksu kahe kohandatud funktsiooniga. Ja kuna ma ei saa tuua täielikku näidet selle kohta, kuidas see teie kasutusjuhul välja näeb, peab kood olema veidi üldistatud.
Haakimine otsingusse
Järgmises kokkuvõttes näete kolme asja.
- Kinnitage, et kasutaja on haldusalal ja ta on redigeerimislehel.
- Kasutaja on sisestanud otsingu.
- Otsingufraas on teisendatud massiiviks, välditud ja lisatud WP_Query eksemplari metapäringu atribuudile.
<?php
add_filter('pre_get_posts', function ($query) {
// Make sure we're in the admin, an administrator, and on the edit page.
if (!is_admin() || !current_user_can('manage_options') || 'edit' !== get_current_screen()->base) {
return;
}
// Determine if the user is running a search.
$search = filter_input(INPUT_GET, 's', FILTER_SANITIZE_STRING);
if (empty($search)) {
return;
}
$query->set(
'meta_query',
[
[
'key' => 'headline_notes',
'value' => esc_sql(preg_replace('/s+?/', '%', $search)), // For flexible search, make sure to replace all white space with % for LIKE.
'compare' => 'LIKE',
],
]
);
});
Eeldades, et kõik ülaltoodud on tõesed, värskendab see päringut, mis käivitatakse WordPressi andmebaasis enne järgmise lehe renderdamist, nii et tulemused sisaldavad metaandmete teavet.
WHERE-klausli värskendamine
Enne kui oleme lõpetanud, peame siiski veenduma, et oleme käivitatud päringut värskendanud.
Vaikimisi koostatakse päring ANDtoiminguga, mis takistab meil postituste pealkirju, väljavõtteid, sisu ja metaandmeid korralikult läbi vaatamast. siiski tuleb päringut värskendada, et see kasutaks ORtoimingut.
Täiesti otseses mõttes tähendab see, et see näeb välja pealkirjas, sisus, väljavõttes või metaandmetes.
Olen valinud oma teostuses regulaaravaldise kasutamise, kuid teie teostus võib töötada ka alamstringide asendamisega. Seega on seda veidi kommenteeritud, et anda teile võimalikult palju paindlikkust.
<?php
add_filter( 'posts_where', function($where, $query) {
// Determine if 'headline_notes' appears in the WHERE clause.
$position = strpos($where, 'acme_meta_key');
if (false === $position) {
return $where;
}
// Look for the 'AND' clasue and replace it with 'OR' in the WHERE clause.
$regularExpress = '//mi'; // Your regular expression.
$replacement = ''; // Your string to replace.
return preg_replace(
$regularExpression,
$replacement,
$where
);
}, 10, 2);
See värskendab WHEREklauslit, mis käivitatakse artikli algosas, kuhu lisame metaandmeid, töökomplekti lõpuleviimiseks.
On ka teisi viise
Pange tähele, et vajalike tulemuste saavutamiseks on WP_Queryga töötamiseks mõned uskumatult paindlikud viisid. Ja teie rakendamine varieerub sõltuvalt sellest, mida te teete.
Nii et kaaluge seda ühte paljudest kasutusviisidest; aga teadke, et kui teil on:
- üks võti,
- väärtus (või väärtus, mille saab jagada massiiviks),
- ja soovite otsida metaandmeid tavapärase postituse sisu kõrval
Siis see toimib.
