admin管理员组文章数量:1122846
I have a problem with my Gutenberg custom block. Alone, it works perfectly on every page or post. But, when I want to add this block, which is set to be dynamic, to a custom post type, it says "This block has encountered an error and cannot be previewed.". What can be a problem to do this? Code is given here. Thank you in advance.
plugin.php - defining Gutenberg custom block
function movieFavQuote() {
wp_enqueue_script(
'favquote-handler',
plugin_dir_url(__FILE__) . 'quote-block.js',
array('wp-blocks', 'wp-i18n', 'wp-editor'),
true
);
}
add_action('enqueue_block_editor_assets', 'movieFavQuote');
function favQuoteMeta() {
register_meta('post', 'content', array('show_in_rest' => true, 'type' => 'string', 'single' => true));
}
add_action('init', 'favQuoteMeta');
quote-block.js - defining Gutenberg custom block
wp.blocks.registerBlockType('pavle/movie-quote', {
title: 'Favourite movie quote',
icon: "smiley",
category: "common",
attributes: {
content: {type: 'string', source: 'meta', meta: 'content'}
},
edit: function(props) {
function updateContent(event) {
props.setAttributes({content: event.target.value})
}
return wp.element.createElement(
"div",
null,
wp.element.createElement("h3", null, " Favourite movie quote: "),
wp.element.createElement("input", {
type: "text",
value: props.attributes.content,
onChange: updateContent
})
);
},
save: function(props) {
return wp.element.createElement("h2", null, " Favourite movie quote:", props.attributes.content);
}
})
movies.php - custom post type defining
<?php
function movie_cpt() {
$labels = array(
'name' => _x( 'Movies', 'Post Type General Name', 'text_domain' ),
'singular_name' => _x( 'Movie', 'Post Type Singular Name', 'text_domain' ),
'menu_name' => __( 'Movies', 'text_domain' ),
'name_admin_bar' => __( 'Movies', 'text_domain' ),
'archives' => __( 'Movie Archive', 'text_domain' ),
'attributes' => __( 'Item Attributes', 'text_domain' ),
'parent_item_colon' => __( 'Parent Item:', 'text_domain' ),
'all_items' => __( 'All Movies', 'text_domain' ),
'add_new_item' => __( 'Add New Movie', 'text_domain' ),
'add_new' => __( 'Add New Movie', 'text_domain' ),
'new_item' => __( 'New Movie', 'text_domain' ),
'edit_item' => __( 'Edit Movie', 'text_domain' ),
'update_item' => __( 'Update Movie', 'text_domain' ),
'view_item' => __( 'View Movie', 'text_domain' ),
'view_items' => __( 'View Movie', 'text_domain' ),
'search_items' => __( 'Search Movies', 'text_domain' ),
'not_found' => __( 'Movie not Found', 'text_domain' ),
'not_found_in_trash' => __( 'Movie not Found in Trash', 'text_domain' ),
'featured_image' => __( 'Featured Image', 'text_domain' ),
'set_featured_image' => __( 'Set featured image', 'text_domain' ),
'remove_featured_image' => __( 'Remove featured image', 'text_domain' ),
'use_featured_image' => __( 'Use as featured image', 'text_domain' ),
'insert_into_item' => __( 'Insert into item', 'text_domain' ),
'uploaded_to_this_item' => __( 'Uploaded to this item', 'text_domain' ),
'items_list' => __( 'Movie List', 'text_domain' ),
'items_list_navigation' => __( 'Items list navigation', 'text_domain' ),
'filter_items_list' => __( 'Filter items list', 'text_domain' ),
);
$args = array(
'label' => __( 'Movie', 'text_domain' ),
'description' => __( 'Post Type Description', 'text_domain' ),
'labels' => $labels,
'supports' => array( 'title', 'editor'),
'taxonomies' => array( 'category', 'post_tag' ),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 5,
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'capability_type' => 'page',
'show_in_rest' => true,
'register_meta_box_cb' => 'movie_meta_box'
);
register_post_type( 'movie', $args );
}
add_action( 'init', 'movie_cpt');
function movie_meta_box() {
add_meta_box(
'movie-title',
__('Movie Title', 'sitepoint'),
'movie_title_meta_box_callback',
);
}
add_action('add_meta_boxes_movie', 'movie_meta_box');
function movie_title_meta_box_callback($post) {
wp_nonce_field('movie_title_nonce', 'movie_title_nonce');
$value = get_post_meta($post->ID, '_movie_title', true);
echo '<textarea style = "width:100%" id="movie_title" name="movie_title">' . esc_attr( $value ) . '</textarea>';
}
function save_movie_title_meta_box_data($post_id) {
if (!isset($_POST['movie_title_nonce'])) {
return;
}
if(!wp_verify_nonce( $_POST['movie_title_nonce'], 'movie_title_nonce' )) {
return;
}
if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if(isset($_POST['post_type']) && 'page' == $_POST['post_type']) {
if ( ! current_user_can( 'edit_page', $post_id ) ) {
return;
}
}
else {
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return;
}
}
if(!isset($_POST['movie_title'])) {
return;
}
$my_data = sanitize_text_field( $_POST['movie_title'] );
update_post_meta( $post_id, '_movie_title', $my_data );
}
add_action('save_post', 'save_movie_title_meta_box_data');
I have a problem with my Gutenberg custom block. Alone, it works perfectly on every page or post. But, when I want to add this block, which is set to be dynamic, to a custom post type, it says "This block has encountered an error and cannot be previewed.". What can be a problem to do this? Code is given here. Thank you in advance.
plugin.php - defining Gutenberg custom block
function movieFavQuote() {
wp_enqueue_script(
'favquote-handler',
plugin_dir_url(__FILE__) . 'quote-block.js',
array('wp-blocks', 'wp-i18n', 'wp-editor'),
true
);
}
add_action('enqueue_block_editor_assets', 'movieFavQuote');
function favQuoteMeta() {
register_meta('post', 'content', array('show_in_rest' => true, 'type' => 'string', 'single' => true));
}
add_action('init', 'favQuoteMeta');
quote-block.js - defining Gutenberg custom block
wp.blocks.registerBlockType('pavle/movie-quote', {
title: 'Favourite movie quote',
icon: "smiley",
category: "common",
attributes: {
content: {type: 'string', source: 'meta', meta: 'content'}
},
edit: function(props) {
function updateContent(event) {
props.setAttributes({content: event.target.value})
}
return wp.element.createElement(
"div",
null,
wp.element.createElement("h3", null, " Favourite movie quote: "),
wp.element.createElement("input", {
type: "text",
value: props.attributes.content,
onChange: updateContent
})
);
},
save: function(props) {
return wp.element.createElement("h2", null, " Favourite movie quote:", props.attributes.content);
}
})
movies.php - custom post type defining
<?php
function movie_cpt() {
$labels = array(
'name' => _x( 'Movies', 'Post Type General Name', 'text_domain' ),
'singular_name' => _x( 'Movie', 'Post Type Singular Name', 'text_domain' ),
'menu_name' => __( 'Movies', 'text_domain' ),
'name_admin_bar' => __( 'Movies', 'text_domain' ),
'archives' => __( 'Movie Archive', 'text_domain' ),
'attributes' => __( 'Item Attributes', 'text_domain' ),
'parent_item_colon' => __( 'Parent Item:', 'text_domain' ),
'all_items' => __( 'All Movies', 'text_domain' ),
'add_new_item' => __( 'Add New Movie', 'text_domain' ),
'add_new' => __( 'Add New Movie', 'text_domain' ),
'new_item' => __( 'New Movie', 'text_domain' ),
'edit_item' => __( 'Edit Movie', 'text_domain' ),
'update_item' => __( 'Update Movie', 'text_domain' ),
'view_item' => __( 'View Movie', 'text_domain' ),
'view_items' => __( 'View Movie', 'text_domain' ),
'search_items' => __( 'Search Movies', 'text_domain' ),
'not_found' => __( 'Movie not Found', 'text_domain' ),
'not_found_in_trash' => __( 'Movie not Found in Trash', 'text_domain' ),
'featured_image' => __( 'Featured Image', 'text_domain' ),
'set_featured_image' => __( 'Set featured image', 'text_domain' ),
'remove_featured_image' => __( 'Remove featured image', 'text_domain' ),
'use_featured_image' => __( 'Use as featured image', 'text_domain' ),
'insert_into_item' => __( 'Insert into item', 'text_domain' ),
'uploaded_to_this_item' => __( 'Uploaded to this item', 'text_domain' ),
'items_list' => __( 'Movie List', 'text_domain' ),
'items_list_navigation' => __( 'Items list navigation', 'text_domain' ),
'filter_items_list' => __( 'Filter items list', 'text_domain' ),
);
$args = array(
'label' => __( 'Movie', 'text_domain' ),
'description' => __( 'Post Type Description', 'text_domain' ),
'labels' => $labels,
'supports' => array( 'title', 'editor'),
'taxonomies' => array( 'category', 'post_tag' ),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 5,
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'capability_type' => 'page',
'show_in_rest' => true,
'register_meta_box_cb' => 'movie_meta_box'
);
register_post_type( 'movie', $args );
}
add_action( 'init', 'movie_cpt');
function movie_meta_box() {
add_meta_box(
'movie-title',
__('Movie Title', 'sitepoint'),
'movie_title_meta_box_callback',
);
}
add_action('add_meta_boxes_movie', 'movie_meta_box');
function movie_title_meta_box_callback($post) {
wp_nonce_field('movie_title_nonce', 'movie_title_nonce');
$value = get_post_meta($post->ID, '_movie_title', true);
echo '<textarea style = "width:100%" id="movie_title" name="movie_title">' . esc_attr( $value ) . '</textarea>';
}
function save_movie_title_meta_box_data($post_id) {
if (!isset($_POST['movie_title_nonce'])) {
return;
}
if(!wp_verify_nonce( $_POST['movie_title_nonce'], 'movie_title_nonce' )) {
return;
}
if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if(isset($_POST['post_type']) && 'page' == $_POST['post_type']) {
if ( ! current_user_can( 'edit_page', $post_id ) ) {
return;
}
}
else {
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return;
}
}
if(!isset($_POST['movie_title'])) {
return;
}
$my_data = sanitize_text_field( $_POST['movie_title'] );
update_post_meta( $post_id, '_movie_title', $my_data );
}
add_action('save_post', 'save_movie_title_meta_box_data');
Share
Improve this question
edited Dec 5, 2022 at 16:44
Novica Vojinovic
asked Dec 5, 2022 at 8:09
Novica VojinovicNovica Vojinovic
134 bronze badges
7
- What do you mean by "when I want to add this block, which is set to be dynamic, to a custom post type"? Can you please explain more? – Krunal Bhimajiyani Commented Dec 5, 2022 at 12:22
- @KrunalBhimajiyani When I open Add new page/post and want to add this gutenberg block, everything is ok, both on front and backend. When I tru to add this block to custom-post Movies, there is a message "This block has encountered an error and cannot be previewed." I don't know why on a normal post or page there is no problem, but in custom post type there is a problem. – Novica Vojinovic Commented Dec 5, 2022 at 12:26
- It is working fine for custom post types too. I have tried in my local. – Krunal Bhimajiyani Commented Dec 5, 2022 at 12:29
- Then it must work on my local, too, but I really don't know the problem. Maybe to deactivate/activate the Movies plugin? Edit: again not working. – Novica Vojinovic Commented Dec 5, 2022 at 12:31
- Can you please add the labels and args of your post type? – Krunal Bhimajiyani Commented Dec 5, 2022 at 12:44
1 Answer
Reset to default 0Try adding custom-fields to the support array;
'supports' => [
'title',
'editor',
'thumbnail',
'custom-fields'
],
本文标签: Custom Gutenberg block problemThis block has encountered an error and cannot be previewed
版权声明:本文标题:Custom Gutenberg block problem - This block has encountered an error and cannot be previewed 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736291256a1928685.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论