Lisage WordPressis oma kohandatud postituse tüübi jaoks kohandatud püsilingi säte
See on õpetus selle kohta, kuidas lisada kohandatud sätet WordPressi administraatorilehele „Seaded > Püsilingid", et määrata oma kohandatud postituse tüübi nälk. Kui arendate teemat või pistikprogrammi teistele, millel on sisseehitatud kohandatud postituse tüüp, hindab selle kasutaja selle sätte lisamist, kuna võimaldab neil otsustada kohandatud postituse tüübi URL-i struktuuri üle.
Ma ei käsitle üksikasjalikult kohandatud postituse tüübi lisamist; Kui te pole kindel, soovitan vaadata, kuidas lisada kohandatud postituse tüüp.
Oletame, et teil on kohandatud postituse tüübi registreerimiseks selline kood:
add_action('init', function() {
register_post_type('reference', [
'label' => __('References', 'txtdomain'),
'public' => true,
'menu_position' => 5,
'menu_icon' => 'dashicons-book',
'supports' => ['title', 'editor', 'thumbnail', 'author', 'custom-fields', 'revisions'],
'show_in_rest' => true,
'rewrite' => [
'slug' => 'reference',
'with_front' => false
],
'labels' => [
'singular_name' => __('Reference', 'txtdomain'),
'add_new_item' => __('Add new reference', 'txtdomain'),
'new_item' => __('New reference', 'txtdomain'),
'view_item' => __('View reference', 'txtdomain'),
'not_found' => __('No references found', 'txtdomain'),
'not_found_in_trash' => __('No references found in trash', 'txtdomain'),
'all_items' => __('All references', 'txtdomain'),
'insert_into_item' => __('Insert into reference', 'txtdomain')
],
]);
});
Meid huvitab rewriteargument. Siin määratleme, millise nälkja saab postituse tüüp kõigi oma postituste ette. Teie kohandatud postituse tüübi registreerimise kood võib veidi erineda, nt ilma " with_front", kuid meid huvitab siin " slug":
'rewrite' => [
'slug' => 'reference',
'with_front' => false
]
Selle koodi abil saate praktiliselt kõvasti kodeerida, milline on postituste püsilingi nälkjas. Viidete postituse tüüpi võib kasutada mitut tüüpi sisu ja teema kasutajate jaoks; nt projekt, portfell, kliendiviited, ettevõtte viited jne. Teema paindlikuks muutmiseks võiksite lubada teema kasutajal ise postituse tüübi üle otsustada.
Nii et vaatame, kuidas seda teha!
Välja lisamine ja salvestamine
WordPressi sätete API kasutamine lihtsustab seda meie jaoks mõnevõrra. Peame vaid lisama seadete välja ja ütlema WordPressile, millisel administraatori lehel me seda kuvada tahame – meie puhul püsilinkide seadete lehel. Pidage meeles, et peame kirjutama funktsiooni, mis tegelikult salvestab ka väärtuse, mida me ka lõpus teeme.
Me ühendame oma funktsiooni admin_initkonksu külge ja registreerime oma seadistuse. Seadistuse registreerimisel määratleme, millist funktsiooni see sätte väljastamiseks käivitama peaks:
add_action('admin_init', function() {
add_settings_field('mytheme_reference_slug', __('References base', 'txtdomain'), 'mytest_reference_slug_output', 'permalink', 'optional');
});
Argumendi nelja määramine [add_settings_field](https://developer.wordpress.org/reference/functions/add_settings_field/)()väärtusele 'permalink'annab WordPressile käsu lisada säte püsilinkide seadete lehele. Argument number kolm on funktsioon, mida WordPress peaks seadistuse väljastamisel käivitama – funktsioon, mille määratleme järgmisena (väljaspool konksu funktsiooni):
function mytest_reference_slug_output() {
?>
<input name="mytheme_reference_slug" type="text" class="regular-text code" value="<?php echo esc_attr(get_option('mytheme_reference_slug')); ?>" placeholder="<?php echo 'reference'; ?>" />
<?php
}
Selles funktsioonis väljastame lihtsalt vormi põhiteksti <input>. Selle valueatribuudi jaoks hangime sätte väärtuse, kasutades [get_option](https://developer.wordpress.org/reference/functions/get_option/)(). Atribuut placeholderon valikuline, kuid hea tava on lisada vaikimisi slug-baas, et teema kasutaja teaks, kas ta soovib selle väärtust muuta või mitte.
Kui salvestate koodi ja lähete kohe oma WordPressi püsilinkide lehele, peaksite oma välja nägema päris lõpus:
Hetkel säte oma väärtust ei salvesta, see on järgmine samm.
Peame lisama veel ühe funktsiooni, admin_initmis kontrollib, kas meie säte esitati püsilingi struktuuri kujul või mitte. Ja kui nii, siis tuleks see salvestada [update_option](https://developer.wordpress.org/reference/functions/update_option/)().
add_action('admin_init', function() {
if (isset($_POST['permalink_structure'])) {
update_option('mytheme_reference_slug', trim($_POST['mytheme_reference_slug']));
}
});
Püsilinkide seadete salvestamisel esitatakse vorm, nii et saame väärtused PHP $_POSTglobaalse muutuja kaudu. Vormil esitatud väärtused salvestatakse massiivina, mille võtmeteks on sisendi nime atribuudid. Meie puhul määrame mytheme_reference_slugoma sisendile nimeatribuudi " ", et saaksime esitatud väärtusele juurde pääseda $_POST['mytheme_reference_slug'].
Nüüd peaks seade püsilingi sätete lehel täielikult töötama. Viimane osa on selle sätte väärtuse lisamine meie kohandatud postituse tüübile.
Meie kohandatud postituse tüübi loomiseks kasutage meie seadet
Selleks, et meie kohandatud postitustüüp kasutaks meie sätte kohandatud väärtust, naaseme register_post_type()funktsioonikutseni ja muudame rewriteargumendi järgmiselt:
'rewrite' => [
'slug' => (!empty(get_option('mytheme_reference_slug')))? get_option('mytheme_reference_slug'): 'reference',
'with_front' => false
]
Kõik, mida me siin teeme, on meie uue valiku väärtuse hankimine. Kui see on tühi, kasutatakse vaikimisi ('reference').
Ja see ongi kõik! Nüüd kasutab teie kohandatud postituse tüüp mis tahes nälkmise alust, mis on määratud lehel Püsilinkide seaded. Samamoodi saate lisada rohkem sätteid, näiteks kohandatud taksonoomiate jaoks.
Täielik kood
Kõik koos nüüd.
// Register custom post type
add_action('init', function() {
register_post_type('reference', [
'label' => __('References', 'txtdomain'),
'public' => true,
'menu_position' => 5,
'menu_icon' => 'dashicons-book',
'supports' => ['title', 'editor', 'thumbnail', 'author', 'custom-fields', 'revisions'],
'show_in_rest' => true,
'rewrite' => [
'slug' => (!empty(get_option('mytheme_reference_slug')))? get_option('mytheme_reference_slug'): 'reference',
'with_front' => false
],
'labels' => [
'singular_name' => __('Reference', 'txtdomain'),
'add_new_item' => __('Add new reference', 'txtdomain'),
'new_item' => __('New reference', 'txtdomain'),
'view_item' => __('View reference', 'txtdomain'),
'not_found' => __('No references found', 'txtdomain'),
'not_found_in_trash' => __('No references found in trash', 'txtdomain'),
'all_items' => __('All references', 'txtdomain'),
'insert_into_item' => __('Insert into reference', 'txtdomain')
],
]);
});
// Add setting
add_action('admin_init', function() {
add_settings_field('mytheme_reference_slug', __('References base', 'txtdomain'), 'mytest_reference_slug_output', 'permalink', 'optional');
});
// Setting output
function mytest_reference_slug_output() {
?>
<input name="mytheme_reference_slug" type="text" class="regular-text code" value="<?php echo esc_attr(get_option('mytheme_reference_slug')); ?>" placeholder="<?php echo 'reference'; ?>" />
<?php
}
// Save setting
add_action('admin_init', function() {
if (isset($_POST['permalink_structure'])) {
update_option('mytheme_reference_slug', trim($_POST['mytheme_reference_slug']));
}
});
