【发布时间】:2021-05-26 11:52:21
【问题描述】:
所以,我正在为 WordPress 中的 woo-commerce 开发一个插件,现在正在尝试构建一个小部件。 我已经成功构建了一个可以在商店中显示的自定义小部件(在外观 > 小部件下)。 现在我想构建一个自定义 Gutenberg Block 以在页面编辑器中使用。 现在的问题是,即使是一个简单的示例似乎也没有加载,但任何地方也没有一条错误消息,所以我对如何继续一无所知。
我使用了来自 WordPress 文档本身的示例,正如他们所说,对于这个简单的示例,应该在 '插入器对话框' 中初始化块。
我的代码是>
block.jsx(使用的文件由webpack编译,加载并显示控制台日志):
import { registerBlockType } from '@wordpress/blocks';
import { useBlockProps } from '@wordpress/block-editor';
const blockStyle = {
backgroundColor: '#900',
color: '#fff',
padding: '20px',
};
console.log("test1");
registerBlockType('gutenberg-examples/example-01-basic-esnext', {
apiVersion: 2,
title: 'Example: Basic (esnext)',
icon: 'universal-access-alt',
category: 'design',
example: {},
edit() {
const blockProps = useBlockProps( { style: blockStyle } );
return <div {...blockProps}>Hello World, step 1 (from the editor).</div>;
},
save() {
const blockProps = useBlockProps.save( { style: blockStyle } );
return <div {...blockProps}>Hello World, step 1 (from the front-end).</div>;
},
} );
blockload.php(测试了添加操作(“init”)但似乎也没有做太多:
<?php
// if (! defined( "ABSPATH")){
// exit;
// };
function gutenberg_examples_01_register_block() {
// automatically load dependencies and version
// $asset_file = include( plugin_dir_path( __FILE__ ) . 'build/index.asset.php');
$asset_file = array('dependencies' => array('wp-element', 'wp-polyfill'), 'version' => 'fc93c4a9675c108725227db345898bcc');
wp_register_script(
'gutenberg-examples-01-esnext',
plugins_url('wocom_bl/resources/Scripts/bundles/editpage/editpage.bundle.js'),
// plugins_url( 'build/index.js', __FILE__ ),
$asset_file['dependencies'],
$asset_file['version']
);
register_block_type( 'gutenberg-examples/example-01-basic-esnext', array(
'editor_script' => 'gutenberg-examples-01-esnext',
) );
}
// add_action( 'init', 'gutenberg_examples_01_register_block' );
add_action('enqueue_block_assets', 'gutenberg_examples_01_register_block');
以及启动一切的主插件文件调用:
if ( wcmbl_isWooCommerceActivated() ) {
require_once __DIR__ . '/includes/settings.php';
require_once __DIR__ . '/includes/products/producttab.php';
// require_once __DIR__ . '/includes/page/register_widgets.php';
require_once __DIR__ . '/includes/page/blocks/blockload.php';
}
因此,blockload.php 中的任何语法错误都会引发错误。 正如我现在发布的那样,一切正常,任何地方都没有错误(wp_bugging,true) 但是插入器对话框的设计类别下也没有额外的块?
那么我现在从哪里开始找到罪魁祸首呢?
编辑**
所以,基本上我不知道最初的 js 出了什么问题,因为它来自 dev.wordpress 上的示例。
我采用了一种稍微不同的方法,即 js 如何返回内容,但它确实有效。 遵循此示例(edit2 >> tho this 使用了我现在看到的已弃用的函数,因此不应该使用,但得到了一些工作,因此其余部分超出了此问题的范围): https://themes.artbees.net/blog/create-a-custom-block-for-wordpress-gutenberg/
所以问题结束了!
【问题讨论】:
-
我刚刚检查了我的正常设置情况,而且我的依赖项数组 (PHP) 中有
wp-blocks和wp-block-editor,我使用init挂钩来注册块而不是 @ 987654328@。也许......您在进行更改后是否重新激活了插件? -
尝试了你的建议,但仍然没有来自前端的任何响应。另外,这是我应该做的事情吗?我已经为 woocommerce 设置、编辑产品设置、插件选项卡等构建了东西,而不是一次我需要重新激活我的插件?
标签: javascript php wordpress wordpress-gutenberg