Tämä on opetusohjelma mukautetun asetuksen lisäämisestä WordPressin järjestelmänvalvojan sivulle "Asetukset > Pysyvät linkit", jotta voit määrittää mukautetun viestityypin etanan. Jos olet kehittämässä teemaa tai laajennusta muille, joissa on sisäänrakennettu mukautettu viestityyppi, sen käyttäjä arvostaa tämän asetuksen lisäämistä, koska hän voi päättää mukautetun viestityypin URL-rakenteen.
En käy läpi yksityiskohtaisesti mukautetun viestityypin lisäämistä. Jos olet epävarma, suosittelen tutustumaan mukautetun viestityypin lisäämiseen.
Oletetaan, että sinulla on seuraavanlainen koodi mukautetun viestityypin rekisteröimiseksi:
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')
],
]);
});
Meitä kiinnostaa rewriteargumentti. Tässä määritämme, minkä etanan viestityyppi saa kaikkien viestiensä eteen. Muokatun viestityypin rekisteröintikoodisi voi olla hieman erilainen, esim. ilman " with_front", mutta se, mistä olemme kiinnostuneita, on " slug":
'rewrite' => [
'slug' => 'reference',
'with_front' => false
]
Tällä koodilla käytännössä koodaat, mikä viestien pysyvä linkki on. Viestityyppiä viittauksille voidaan käyttää monentyyppisille sisällön ja teeman käyttäjille; esim. projekti, portfolio, asiakasviitteet, yritysreferenssit jne. Jotta teemasi olisi joustava, saatat haluta antaa teeman käyttäjän päättää itse postauksen tyypin etana.
Joten katsotaan kuinka se tehdään!
Kentän lisääminen ja tallentaminen
WordPressin asetussovellusliittymän käyttö yksinkertaistaa tätä meille jonkin verran. Meidän tarvitsee vain lisätä asetuskenttä ja kertoa WordPressille, millä järjestelmänvalvojan sivulla haluamme sen näkyvän – meidän tapauksessamme pysyvien linkkien asetussivulla. Muista, että meidän on kirjoitettava funktio, joka todella tallentaa myös arvon, minkä teemme lopussa.
Kytkemme toimintomme admin_initkoukkuun ja rekisteröimme asetuksemme. Kun rekisteröimme asetuksen, määritämme, mikä toiminto sen tulee suorittaa asetuksen tulostamiseksi:
add_action('admin_init', function() {
add_settings_field('mytheme_reference_slug', __('References base', 'txtdomain'), 'mytest_reference_slug_output', 'permalink', 'optional');
});
Argumentin neljä asettaminen [add_settings_field](https://developer.wordpress.org/reference/functions/add_settings_field/)()arvoon 'permalink'kehottaa WordPressiä lisäämään asetuksen Pysyvien linkkien asetukset -sivulle. Argumentti numero kolme on funktio, joka WordPressin tulee suorittaa asetusta tulostaessaan – funktio, jonka määrittelemme seuraavaksi (kiinnittyneen funktion ulkopuolella):
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
}
Tässä funktiossa tulostetaan yksinkertaisesti perusmuototeksti <input>. Sen valueattribuutille noudetaan asetuksen arvo käyttämällä [get_option](https://developer.wordpress.org/reference/functions/get_option/)(). Attribuutti placeholderon valinnainen, mutta on hyvä käytäntö lisätä oletusarvosi, jotta teeman käyttäjä tietää, haluaako hän muuttaa sen arvoa vai ei.
Jos tallennat koodisi ja siirryt WordPressin pysyvät linkit -sivullesi nyt, sinun pitäisi nähdä kenttäsi aivan lopussa:
Tällä hetkellä asetus ei tallenna arvoaan, se on seuraava vaihe.
Meidän on lisättävä toinen toiminto, admin_initjoka tarkistaa, onko asetuksemme lähetetty pysyvän linkin rakennemuodossa. Ja jos on, se tulisi tallentaa -sovelluksella [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']));
}
});
Pysyvien linkkien asetuksia tallennettaessa lähetetään lomake, joten voimme saada arvot PHP:n $_POSTglobaalin muuttujan kautta. Lomakkeesta lähetetyt arvot tallennetaan taulukkona syötteen nimimääritteillä avaimina. Tässä tapauksessa asetamme mytheme_reference_slugsyötteellemme name-attribuutin, jotta voimme käyttää lähetettyä arvoa $_POST['mytheme_reference_slug'].
Nyt asetuksen pitäisi toimia täysin Permalink Settings -sivulla. Viimeinen osa on tämän asetuksen arvon liittäminen mukautettuun viestityyppiimme.
Mukautetun viestityypin tekeminen käytä asetustamme
Jotta mukautettu viestityyppimme käyttäisi asetuksemme mukautettua arvoa, palaamme register_post_type()funktiokutsuun ja muokkaamme rewriteargumentin tältä:
'rewrite' => [
'slug' => (!empty(get_option('mytheme_reference_slug')))? get_option('mytheme_reference_slug'): 'reference',
'with_front' => false
]
Täällä vain haemme uuden vaihtoehtomme arvoa. Jos se on tyhjä, käytetään oletusarvoa ('reference').
Ja siinä se! Nyt mukautettu viestityyppisi käyttää Pysyvien linkkien asetukset -sivulla määritettyä etanapohjaa. Voit lisätä asetuksia samalla tavalla, esimerkiksi mukautettuja taksonomioita varten.
Koko koodi
Kaikki yhdessä nyt.
// 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']));
}
});
