Dynamic WP Block with Save
November 3, 2024 · AI Conversations
### Step 1: Register Your Block with PHP
When registering your block, ensure that you set it as a dynamic block and define a render callback that points to a PHP function. Here's an example:
function register_my_dynamic_block() {
register_block_type('namespace/my-dynamic-block', array(
'render_callback' => 'render_my_dynamic_block',
'editor_script' => 'my-block-editor-script',
'script' => 'my-block-save-script',
));
}
add_action('init', 'register_my_dynamic_block');
function render_my_dynamic_block($attributes) {
// You can output dynamic content here if needed.
return '<div class="my-dynamic-block">Dynamic content goes here.</div>';
}
### Step 2: Create Your `save.js`
In your `save.js`, define how the block should be rendered on the front end. You can include static or dynamic markup here as needed. Here’s a simple example:
const { createElement } = wp.element;
const SaveComponent = () => {
return createElement('div', { className: 'my-dynamic-block' }, 'Static content from save.js');
};
export default SaveComponent;
### Step 3: Update Your Block Registration
Make sure to include your `save.js` file in the block registration process. If you are using a build tool like Webpack, ensure that `save.js` is transpiled and bundled appropriately:
function register_my_dynamic_block() {
// Enqueue block scripts and styles
wp_enqueue_script(
'my-block-save-script',
get_template_directory_uri() . '/path/to/save.js',
array('wp-blocks', 'wp-element', 'wp-editor'), // Dependencies
null,
true
);
// Register the block
register_block_type('namespace/my-dynamic-block', array(
'render_callback' => 'render_my_dynamic_block',
'editor_script' => 'my-block-editor-script',
));
}
### Step 4: Use the Block in the Editor
When you add the block in the editor, it will render according to the `save.js` output, but keep in mind that if you want any dynamic data (from a database, API, etc.), you'll need to manage that in your render callback.
### Note
Using both a dynamic render and a `save.js` may lead to some inconsistency in how the block is displayed if the dynamic content differs from the static content in `save.js`. Ensure that both the server-side and client-side representations of the block are in sync to avoid any issues.
With this setup, you'll be able to display content on the front end using `save.js`, while still utilizing PHP for any dynamic functionalities you need.