Restringir en las barras laterales de complementos por tipo de publicación

Cuando creo configuraciones para Publicaciones, Páginas o cualquier tipo de publicación personalizada, siempre uso Barras laterales del complemento de Gutenberg. Pero la cuestión es que a veces no desea crear una barra lateral separada para cada tipo de publicación, prefiere mostrar algunos paneles (o incluso campos) para un tipo de publicación y los otros paneles para otro.

Como aquí:

Restringir los paneles de la barra lateral de Gutenberg por tipo de publicación
En este ejemplo, nuestra barra lateral del complemento «Post Meta» consta de dos paneles, el primero se muestra para cada tipo de publicación personalizada, el segundo, solo para páginas.

Aquí está el código listo en ESNext.

( function( wp ) {

	const { registerPlugin } = wp.plugins;
	const { PluginSidebar } = wp.editPost;
	const { PanelBody } = wp.components;

	const { withSelect } = wp.data;
	const { compose } = wp.compose;

	const MishaSidebar = ( { postType } ) => {

		return (
		
			<PluginSidebar
				name="misha-sidebar"
				title="Post Meta"
			>
					<PanelBody title="Any post type">
					   <p>This is gonna be displayed for all post types.</p>
					</PanelBody>

					{
						'page' == postType &&
							<PanelBody title="Only for Pages" initialOpen={ false }>
								<p>This panel is going to be displayed only for page post type.</p>
							</PanelBody>
					}

			</PluginSidebar>

		)
	}

	// we are going to use withSelect in order for postype to be available inside
	const MishaSidebarwithSelect = withSelect( select => {
		return {
			postType: select( 'core/editor' ).getCurrentPostType(),
		};
	} )( MishaSidebar );

	// register that sidebar
	registerPlugin( 'misha-panel', { render: MishaSidebarwithSelect } );


} )( window.wp );

Como puede ver en el ejemplo anterior, estamos usando withSelectque es HOC (un componente de orden superior), amplía nuestra MishaSidebar componente un poco al proporcionar un nombre de tipo de publicación personalizado, que se fusionará con el componente.

Si desea agregar varios tipos de publicaciones a la condición, puede hacerlo de esta manera:

{
	( 'page' == postType || 'post' == postType ) &&
		<PanelBody title="Only for Pages" initialOpen={ false }>

También puedes deshabilitar fácilmente toda la barra lateral con estas líneas de código:

const MishaSidebar = ( { postType } ) => {

	if ( 'page' !== postType ) {
		return null;
	}
Misha Rudrastyh

Misha Rudrastyh

Desarrollo sitios web desde 2008, por lo que es un total de 14 años de experiencia, Dios mío. Sobre todo, me encanta, me encanta, me encanta crear sitios web con WordPress y Gutenberg, algunas ideas y pensamientos que comparto a lo largo de mi blog.

¿Necesitas ayuda de un desarrollador? Contáctame

Sigueme en Twitter