Täiendavate metakastide, väljade ja muu teabe lisamine WordPressi on lihtne, kui teate õigeid konkse ja õigeid API-sid, mida järgida. Aga mis siis, kui soovite WordPressi taksonoomia lehele teavet lisada?
Oletame näiteks, et soovite luua kohandatud WordPressi kategooria redigeerimislehe või lisada taksonoomia lehele kohandatud teavet?
Seda on endiselt võimalik teha ja see on endiselt suhteliselt lihtne, kuid jällegi peate teadma õigeid konkse, mida kasutada, ja see sõltub ka sellest, kas töötate sisseehitatud taksonoomiaga või kohandatud taksonoomiaga.
Selle postituse jaoks näitan, kuidas seda teha kohandatud, hierarhilise taksonoomia (või lihtsamalt öeldes kohandatud kategooria) abil.
Kohandatud WordPressi kategooria muutmise leht
Esiteks, kui otsustate töötada standardse kategooria lehega, näete tõenäoliselt midagi sellist:
Ja kaks konksu, millega peate töötama, on järgmised:
Kui olete klõpsanud kummalgi lingil, märkate, et viimasel pole teavet, kuid esimesel on järgmine tekst:
Muuda_kategooria_vormi toimingut/konksu saab kasutada kategooria muutmise ekraanil lisatoimingute tegemiseks. Näiteks saate konkreetse kategooria kohta lisateabe salvestamiseks lisada vormivälju.
Sel eesmärgil valin üldiselt selle konksu kasutamise, kuna see on Codexis täpselt määratletud. Selles postituses tegelen siiski ainult teabe renderdamisega, mitte täiendavate väljade lisamisega, mida tuleb salvestada.
Juhtmed Asjad üles
Lihtsamal kujul on parim viis seda tüüpi lehtedele kohandatud teabe lisamiseks luua funktsioon ja kinnitada see ülaltoodud konksu külge. Kõige lihtsamal kujul näeb see välja umbes selline:
<?php
add_action('edit_category_form', 'acme_display_object_ids');
/**
* Displays an ordered list of all of the object IDs for a given
* taxonomy.
*/
function acme_display_object_ids()
{
// Code for displaying the Object IDs goes here.
}
Kui aga valite objektorienteeritud marsruudi, võite valida klassi, mis aktsepteerib konstruktori argumendina konksu ja kuulab selle sündmuse käivitamist. Kui see nii on, võib teie kood välja näha järgmine:
<?php
class ObjectIdSubscriber
{
/**
* @var string the hook to which this class subscribes
*/
private $hook;
/**
* @param string $hook the hook to which this class is registered with WordPress
*/
public function __construct(string $hook)
{
$this->hook = $hook;
}
/**
* Renders all of the information for the object IDs.
*/
public function load()
{
// Code for displaying the Object IDs goes here.
}
}
Sellest olenemata on mõte selles, et teil peab olema klass või funktsioon, mis on ühendatud konksuga, mis kuvab ekraanil teavet.
Teabe kuvamine
Siit edasi on teil vaja midagi renderdada. Olen oma loogika eraldi hoidmise fänn, seega loon tavaliselt kataloogi Vaade ja seejärel paigutan vaadete osafailid sellesse kataloogi.
Muidugi saate alati luua HTML-i stringi PHP funktsioonis (kuid desinfitseerige kindlasti väljund, kasutades näiteks wp_kses ).
Selle näite puhul hoian asja lihtsana: tahan lihtsalt andmebaasist tõmmata nimekirja kõigist postitustest (või objektidest, nagu näete kohe) ja loetleda lehel oleva teabe. Selleks vajan paari andmebaasipäringut ja siis saan tulemuste loendit korrata.
Esiteks vajan päringut, mis hangib antud kategooriast termin_taksonoomia_id :
<?php
// This will retrieve all of the term relationships from where we can get post IDs.
global $wpdb;
$termTaxonomyId = $wpdb->get_results(
$wpdb->prepare(
"
SELECT DISTINCT term_taxonomy_id
FROM $wpdb->term_taxonomy
WHERE term_id = %s
",
$tagId
),
ARRAY_A
);
$termTaxonomyId = isset($termTaxonomyId[0])? $termTaxonomyId[0]: null;
if (null === $termTaxonomyId) {
return null;
}
Seejärel pean hankima loendi kõigist objekti ID -dest, mis on seotud terminiga_taksonoomia_id :
<?php
// This will retrieve all of the post IDs.
$postIds = $wpdb->get_results(
$wpdb->prepare(
"
SELECT object_id
FROM $wpdb->term_relationships
WHERE term_taxonomy_id = %s
",
$termTaxonomyId
),
ARRAY_A
);
if (empty($postIds)) {
return null;
}
Siit edasi saan teabe renderdamiseks kasutada algset funktsiooni (või klassi), mille ma varem lõin :
<ul>
<?php foreach ($postIds as $postId): ?>
<li><?php echo $postId; ?></li>
<?php endforeach; ?>
</ul>
Kuid sealt saate teha palju muid asju.
Seal on rohkem
Nagu märgitud, tagastab see objektide ID-d, mis on sisuliselt postituse ID-d (või lehe ID-d või kohandatud postituse tüübi ID-d või mis iganes tabelist wp_posts ).
Kui teil on see teave olemas, saate hankida mis tahes teavet, näiteks pealkirja, sisu, metaandmeid, erinevat kuupäevateavet ja nii edasi.
Postituse mõte pole aga näidata, millist teavet hankida, vaid kuidas hankida teavet antud taksonoomia kohta ja seejärel renderdada see kohandatud WordPressi kategooria lehel. Ja see on lihtne viis täpselt seda teha.
