Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Navigation: allow plugins to register icons for custom post type and taxonomy variants #31226

Open
Aljullu opened this issue Apr 27, 2021 · 7 comments
Labels
[Block] Navigation Affects the Navigation Block [Feature] Extensibility The ability to extend blocks or the editing experience Needs Dev Ready for, and needs developer efforts [Type] Enhancement A suggestion for improvement.

Comments

@Aljullu
Copy link
Contributor

Aljullu commented Apr 27, 2021

Navigation inner blocks are automatically available for Custom Post Types and taxonomies. That was introduced in #29095 and works great, making plugin authors life much easier. However, it doesn't allow setting a custom icon for those inner blocks.

In the screenshot below, you can see the Product Link, Product Category Link and Product Tag Link blocks added by WooCommerce using the generic icon:

imatge

I anticipate this will be an issue for sites with several plugins installed.

@gwwar do you have any thoughts about whether an interface could be added so plugins can register custom icons for the Navigation inner blocks which are generated automatically?

Step-by-step reproduction instructions

The testing steps from #29095 showcase the issue.

Expected behaviour

As a plugin author, I would like to be able to set custom icons for the custom post types and taxonomies registered in my plugin.

Actual behaviour

AFAIK, currently there is no API do register icons for CPT and taxonomy link blocks.

@Aljullu Aljullu added the [Block] Navigation Affects the Navigation Block label Apr 27, 2021
@getdave
Copy link
Contributor

getdave commented Apr 27, 2021

@Aljullu I agree we should enable the ability to register custom icons for the core/navigation-link variations (which is what you are referring to as the innerBlocks.

You will also notice that once you insert one of the block variations for a custom post type the name of the block in the block sidebar still reads Post link. That should also be fixed.

I'm currently working on #31004 which standardizes the serialization of blocks to nav menu items (and vica versa) so that existing menus will translate perfectly over to the new Nav editor screen. I'd love some more 👀 on that if possible.

@gwwar
Copy link
Contributor

gwwar commented Apr 27, 2021

@gwwar do you have any thoughts about whether an interface could be added so plugins can register custom icons for the Navigation inner blocks which are generated automatically?

Yes, I hope we'll have this in the future. The current variations API only allows icons to be set with a JS function. We need to explore if we can set icons as a react component function OR svg string (and still have this work for React Native). Once an icon is serializable, it'll be possible then to update the server API.

The workaround for right now is adding a block filter, which even the core/navigation-link needs to do:

addFilter(
	'blocks.registerBlockType',
	'core/navigation-link',
        ( settings, name ) => {
             if ( settings.variations ) {
		const variations = settings.variations.map( ( variation ) => {
			return {
				...variation,
				...( ! variation.icon && {
					icon: getIcon( variation.name ), //add your custom icon here
				} ),
			};
		} );
		return {
			...settings,
			variations,
		};
	}
	return settings;
);

@gwwar
Copy link
Contributor

gwwar commented Apr 27, 2021

You will also notice that once you insert one of the block variations for a custom post type the name of the block in the block sidebar still reads Post link.

To fix that, when registering the custom post type, add two new labels item_link and item_link_description. New post type labels were added to avoid joining two translated strings.

109557321-cbe93300-7a8c-11eb-87d5-e7c169b88581

@Aljullu
Copy link
Contributor Author

Aljullu commented Apr 28, 2021

@getdave

@Aljullu I agree we should enable the ability to register custom icons for the core/navigation-link variations (which is what you are referring to as the innerBlocks.

Thanks for clarifying those concepts to me, I'm still new to all the Gutenberg nomenclature. 🙂

I'm currently working on #31004 which standardizes the serialization of blocks to nav menu items (and vica versa) so that existing menus will translate perfectly over to the new Nav editor screen. I'd love some more 👀 on that if possible.

Will do. Adding this to my todo list for this week. 👍

@Aljullu
Copy link
Contributor Author

Aljullu commented Apr 28, 2021

@gwwar

The workaround for right now is adding a block filter, which even the core/navigation-link needs to do:

That worked great, thanks for pointing me in the right direction! I needed to tweak the code a bit because when calling it from a plugin, variation.icon is already set. Sharing the code here in case it's helpful for other plugin authors:

function replaceIcon( variation ) {
	switch ( variation.name ) {
		case 'my-variation':
			return {
				...variation,
				icon: <MyIcon />,
			};
		default:
			return variation;
	}
}

addFilter( 'blocks.registerBlockType', 'my-plugin/navigation-link-icons', ( settings ) => {
	if ( settings.variations ) {
		const variations = settings.variations.map( replaceIcon );
		return {
			...settings,
			variations,
		};
	}
	return settings;
} );

@Aljullu Aljullu added the [Feature] Extensibility The ability to extend blocks or the editing experience label Apr 30, 2021
@gziolo gziolo added the Needs Dev Ready for, and needs developer efforts label Feb 3, 2023
@jordesign jordesign added the [Type] Enhancement A suggestion for improvement. label Sep 8, 2023
@jordesign
Copy link
Contributor

Hey @getdave - just triaging older issues - and wanted to see if we had inadvertently solved this one in the last 2 years? Or if it still needs working on.

@getdave
Copy link
Contributor

getdave commented Nov 7, 2023

I don't think this has been resolved no.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Navigation Affects the Navigation Block [Feature] Extensibility The ability to extend blocks or the editing experience Needs Dev Ready for, and needs developer efforts [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

No branches or pull requests

5 participants