Gutenberg: własne pole meta w panelu dokumentu 🧩
Potrzebujesz dodatkowego pola przy wpisie, np. krótkiej zajawki wyświetlanej nad treścią? W edytorze blokowym dodajesz je do panelu dokumentu w sidebarze. Dane lądują w post meta, a w szablonie wyciągasz je jednym get_post_meta() 🧩
Potrzebujesz dwóch części: rejestracji pola w PHP i panelu w JS. Bez PHP pole się nie zapisze.
Krok 1: zarejestruj pole (PHP)
function my_theme_register_entry_lead_meta() {
register_post_meta( 'post', 'my_theme_entry_lead', array(
'type' => 'string',
'single' => true,
'show_in_rest' => true,
'sanitize_callback' => 'sanitize_textarea_field',
) );
}
add_action( 'init', 'my_theme_register_entry_lead_meta' );
show_in_restudostępnia pole edytorowi. Bez niegogetEditedPostAttribute( 'meta' )go nie zobaczy- Własny typ wpisu musi obsługiwać
custom-fields('supports' => array( 'custom-fields' )), inaczej meta nie trafi do edytora sanitize_textarea_fieldusuwa znaczniki HTML: wpisane<b>lead</b>zapisze się jakolead- Zamień
my_themena własny prefiks
Krok 2: panel w sidebarze (JS)
import { registerPlugin } from '@wordpress/plugins';
import { PluginDocumentSettingPanel } from '@wordpress/editor';
import { TextareaControl } from '@wordpress/components';
import { useSelect, useDispatch } from '@wordpress/data';
import { __ } from '@wordpress/i18n';
const EntryLeadPanel = () => {
const entryLead = useSelect( ( select ) => {
const meta = select( 'core/editor' ).getEditedPostAttribute( 'meta' );
return meta ? meta.my_theme_entry_lead : '';
}, [] );
const { editPost } = useDispatch( 'core/editor' );
return (
<PluginDocumentSettingPanel
name="entry-lead-panel"
title={ __( 'Entry Lead', 'my-theme' ) }
className="entry-lead-panel"
>
<TextareaControl
label={ __( 'Entry Lead', 'my-theme' ) }
help={ __( 'Text to display prominently near the top of the post.', 'my-theme' ) }
value={ entryLead }
onChange={ ( value ) => editPost( { meta: { my_theme_entry_lead: value } } ) }
/>
</PluginDocumentSettingPanel>
);
};
registerPlugin( 'entry-lead-plugin', {
render: EntryLeadPanel,
icon: 'edit',
} );
- Importuj
PluginDocumentSettingPanelz@wordpress/editor. Wersja z@wordpress/edit-postjest przestarzała od WordPressa 6.6 i w konsoli pojawia się ostrzeżenie - Skrypt musi trafić do edytora przez
enqueue_block_editor_assets editPostzmienia wpis w edytorze. Zapis do bazy następuje dopiero po kliknięciu „Zaktualizuj”
Krok 3: wyświetl pole w szablonie
$entry_lead = get_post_meta( get_the_ID(), 'my_theme_entry_lead', true );
if ( $entry_lead ) {
echo '<p class="entry-lead">' . esc_html( $entry_lead ) . '</p>';
}
Sprawdź
Otwórz wpis, w sidebarze wybierz kartę „Wpis” i znajdź panel „Entry Lead”. Wpisz tekst, kliknij „Zaktualizuj” i odśwież edytor: tekst ma zostać w polu.
Jakie pole dodałeś do swoich wpisów? Napisz w komentarzu 👏