A collection of tools for WordPress Gutenberg block building.
To include the editor styles, add this to the top of your block's _editor.scss
:
@import "~@evermade/wp-block-toolkit/build/index.css";
Compliments the base WordPress notice system by allowing you to show either warning or error level notices inside the editor.
<InlineNotice status="error">
<strong>Error: </strong> Lorem ipsum dolor sit amet.
</InlineNotice>
Custom ComboboxControl for selecting a single post. Takes an array of post objects and returns and id number on change.
<PostControl
label="My Label"
value={mySelectedPostId}
posts={myPosts}
onChange={(value) =>
setAttributes({
mySelectedPostId: value,
})
}
/>
For selecting a single post from a large pool of posts. More performant than PostControl
at the cost of requiring additional user input.
As a further performance optimization, by default shows only 20 results and a "View more results" button. You can configure the number of initial results with the numOfInitialResults
prop, or disable the optimization completely by setting it to -1
.
<PostSearchControl
type="page"
label="Choose a page"
placeholder="Search here"
value={mySelectedPageId}
onChange={(value) =>
setAttributes({
mySelectedPageId: value,
})
}
numOfInitialResults={20}
filterResults={(results) => {
// You can modify the search results before returning them.
return results;
}}
/>
Allows you to only show components if certain blocks are installed and activated in the system. If some of the blocks are missing, displays an error instead using an InlineNotice
.
<RequireBlocks blocks={["core/paragraph", "my-namespace/my-custom-block"]}>
<h2>My title</h2>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p>
<MyComponent />
</RequireBlocks>
Select and sort multiple posts, with search filtering. Takes an array of post objects and returns an array of id numbers on change.
<SortablePostsControl
label={"My Label"}
posts={myPosts}
value={mySelectedPosts}
onChange={(value) =>
setAttributes({
mySelectedPosts: value,
})
}
/>
Select and sort multiple posts, by searching from a large pool of posts. Takes an array of post ids as value and returns the same on change.
<SortablePostSearchControl
type="page"
label="Choose pages"
placeholder="Search here"
value={mySelectedPageIds}
onChange={(value) =>
setAttributes({
mySelectedPageIds: value,
})
}
numOfInitialResults={20}
filterResults={(results) => {
// You can modify the search results before returning them.
return results;
}}
/>
Similar to the default WordPress category selector, shows a filterable list of checkboxes.
<TaxonomyControl
slug="category"
label="My Label"
value={mySelectedTaxonomies}
onChange={(value) => setAttributes({ mySelectedTaxonomies: value })}
/>
QoL wrapper for getting all posts of a certain post type, ordered alphabetically by title.
const stories = useAllPosts("story");
const contacts = useAllPosts("contact");
Checks if the listed block names are installed and activated on the site. Also returns the list of missing block names if you wish to list them in an error message for example.
const { missingBlocks, hasRequiredBlocks } = useRequiredBlocks([
"core/paragraph",
"core/image",
]);
QoL wrapper for getting a single post entity using a post type and id.
const story = usePost("story", 13);
Similar to useAllPosts
, except uses a search parameter for the query. Much more performant when dealing with large amounts of content.
It's recommended to debounce the search string, to avoid excessive database queries.
const loremIpsumStories = usePostSearch({
postType: "story",
search: "lorem ipsum",
});
SortablePostSearchControl
.PostSearchControl
's reset button became full width when used inside a medium size Placeholder
component.PostSearchControl
.SortablePostsControl
didn't work properly with setAttributes
of WordPress. Now always returns a sorted list of ids instead of a callback when sorted.TaxonomyControl
is used. It now takes just the taxonomy slug instead of an array of terms.usePostSearch
to use named arguments.PostSearchControl
by limiting the number of initial results.PostSearchControl
now also has a numOfInitialResults
prop that can be used to configure the optimization or disable it completely with -1
.react-sortable-hoc
which is no longer maintained and compatible with React 18 to @dnd-kit/core
.PostSearchControl
results via the filterResults
prop.undefined
items were being added to SortableList.type
as a prop to the example of PostSearchControl.level
prop to status
to be in line with core Notice componentpackage.json