本文深入探讨wordpress自定义区块在编辑器中不显示的问题,揭示常见原因在于javascript资源路径配置不当。教程将详细解释为何使用文件系统路径(如wp_plugin_dir)而非url路径会导致区块加载失败,并提供使用plugin_dir_url(__file__)的正确注册方法及最佳实践,确保您的自定义区块能顺利集成并正常工作。
WordPress的Gutenberg编辑器引入了区块(Blocks)的概念,极大地提升了内容编辑的灵活性。一个自定义区块通常由两部分组成:
当自定义区块在编辑器中无法显示时,通常是由于PHP注册过程中对JavaScript资源的处理不当。
许多开发者在创建自定义区块时会遇到一个令人沮丧的问题:区块代码似乎都已正确编写,但它就是不在Gutenberg编辑器的区块插入器中出现。经过一系列排查,例如确认插件正常工作、尝试不同钩子、检查文件路径、甚至切换到默认主题,问题依然存在。
让我们来看一个典型的PHP注册代码片段,它可能导致这种问题:
add_action('init', function() {
$asset_file = include( WP_PLUGIN_DIR . '/ghs-custom-blocks/assets/js/landing-page-block.asset.php');
wp_register_script('ghs-landing-page',
WP_PLUGIN_DIR . '/ghs-custom-blocks/assets/js/landing-page-block.js', // ⚠️ 问题所在
$asset_file['dependencies'],
$asset_file['version']);
register_block_type('ghs/landing-page-block', [
'api_version' => 2,
'editor_script' => 'ghs-landing-page',
]);
});以及对应的JavaScript区块定义(通常不是问题的直接原因):
import { registerBlockType } from '@wordpress/blocks'
registerBlockType('ghs/landing-page-block', {
title: 'Landing Page',
apiVersion: 2,
category: 'design',
icon: 'smiley',
description: 'Layout for the GHS landing page',
keywords: ['GHS', 'landing', 'page', 'front'],
edit: () => {
return (hello)
},
save: () => {
return (hello)
}
});上述PHP代码中的关键错误在于wp_register_script函数的第二个参数。wp_register_script期望的是一个可公开访问的URL,指向你的JavaScript文件。然而,WP_PLUGIN_DIR常量返回的是插件目录的文件系统路径(例如 /var/www/html/wp-content/plugins/your-plugin-name),而不是其对应的Web URL。
当WordPress尝试加载WP_PLUGIN_DIR . '/ghs-custom-blocks/assets/js/landing-page-block.js'作为脚本URL时,它会生成一个类似file:///var/www/html/wp-content/plugins/ghs-custom-blocks/assets/js/landing-page-block.js的路径,或者直接尝试从网站根目录寻找一个名为/var/www/html/wp-content/plugins/ghs-custom-blocks/assets/js/landing-page-block.js的文件。这显然不是一个有效的HTTP/HTTPS URL,因此浏览器无法找到并加载该脚本,导致区块无法在编辑器中注册和显示。
_url(__FILE__) 获取正确URL要解决这个问题,我们需要使用WordPress提供的辅助函数来获取插件目录的正确URL。plugin_dir_url(__FILE__)是一个非常实用的函数,它返回当前文件所在插件目录的URL。
将错误的WP_PLUGIN_DIR替换为plugin_dir_url(__FILE__),并拼接上相对路径,即可生成正确的脚本URL。
以下是修正后的PHP注册代码:
add_action('init', function() {
// 确保 asset.php 文件路径正确,它通常由构建工具生成
$asset_file = include( plugin_dir_path(__FILE__) . 'assets/js/landing-page-block.asset.php');
wp_register_script(
'ghs-landing-page',
// ✅ 使用 plugin_dir_url(__FILE__) 获取插件URL
plugin_dir_url(__FILE__) . 'assets/js/landing-page-block.js',
$asset_file['dependencies'],
$asset_file['version']
);
register_block_type('ghs/landing-page-block', [
'api_version' => 2,
'editor_script' => 'ghs-landing-page',
]);
});解释:
通过这种方式,wp_register_script将获得一个有效的URL(例如 http://yourdomain.com/wp-content/plugins/ghs-custom-blocks/assets/js/landing-page-block.js),浏览器就能正确加载JavaScript文件,从而使自定义区块在Gutenberg编辑器中正常显示。
自定义WordPress区块未在编辑器中显示的问题,通常归结为JavaScript资源加载路径的配置错误。核心在于wp_register_script函数需要一个可访问的Web URL,而非服务器上的文件系统路径。通过正确使用plugin_dir_url(__FILE__)函数,开发者可以确保脚本被正确加载,从而使自定义区块顺利集成到Gutenberg编辑器中。理解并区分文件系统路径和URL在WordPress开发中至关重要,是避免此类常见问题的关键。
# css
# php
# javascript
# word
# java
# html
# js
# go
# wordpress
# 浏览器
# 工具
# ai
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
Python文件管理规范_工程实践说明【指导】
Win11怎么用设置清理回收站_Win11设置清理回收站技巧【步骤】
Win11怎么设置快速访问主页_Windows11资源管理器文件夹选项
C++中引用和指针有什么区别?(代码说明)
c++的mutex和lock_guard如何使用 互斥锁保护共享资源【多线程】
Windows 10怎么录屏_Windows 10使用Xbox Game Bar录制屏幕视频教程
Windows10电脑怎么设置虚拟内存_Win10高级系统设置性能
PHP 中如何在函数内持久修改引用变量所指向的目标
Win11怎么设置环境变量_Win11配置Path路径变量【详解】
如何使用Golang安装依赖库_管理模块和第三方包
php打包exe怎么传递参数_命令行参数接收方法【解答】
Win11 C盘满了怎么清理 Win11磁盘清理和存储感知使用教程【新手必看】
Win10如何关闭安全中心所有通知 Win10禁用Windows Defender提醒【设置】
Win11怎么设置单手模式_Win11触控键盘布局调整教程【技巧】
如何在Windows中创建新的用户账户?(标准与管理员)
Windows如何使用BitLocker To Go加密U盘?(移动驱动器加密)
如何在JavaScript中动态拼接PHP的base_url与JS变量
php嵌入式多设备通信怎么实现_php同时管理多个串口设备【操作】
Win11右键反应慢怎么办 Win11优化右键菜单加载速度【技巧】
Win11怎么查看电脑配置_Win11硬件配置详细查询方法【详解】
php怎么捕获异常_trycatch结构处理运行时错误的技巧【方法】
Mac怎么给文件夹加密_Mac创建加密磁盘映像教程【安全】
Win11蓝牙开关不见了怎么办_Win11蓝牙驱动丢失修复教程【方法】
Win11怎么更改系统语言_Win11中文语言包下载与安装【指南】
微信JSAPI支付回调PHP怎么接收_处理JSAPI异步通知数据方法【指南】
phpstudy本地环境mysql忘记密码_重置mysqlroot密码操作流程【解答】
如何在 Go 中调用动态链接库(.so)中的函数
如何在Golang中解压文件_Golang compress/gzip解压操作方法
Linux怎么实现内网穿透_Linux安装Frp客户端与服务端配置【方法】
Python邮件系统自动化教程_批量发送解析与模板应用
VSC怎样在VSC中调试PHPAPI_接口调试技巧【详解】
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
Win11怎么查看激活状态_查询Windows 11是否已永久激活【详解】
如何在Golang中使用log包输出不同级别日志_Golang log日志管理与分类
Win10怎样卸载DockerDesktop_Win10卸载DockerDesktop步骤【步骤】
php订单日志怎么按金额排序_php按订单金额排序日志方法【方法】
如何解决同一段404代码在不同主机上表现不一致的问题
如何使用Golang写入二进制文件_Golang io Write二进制写入示例
Win11如何设置省电模式 Win11开启电池节电功能【优化】
MAC怎么在照片中添加水印_MAC自带编辑工具文字水印叠加【方法】
MySQL 中使用 IF 和 CASE 实现查询字段条件化显示
php订单日志怎么按状态筛选_php筛选不同状态订单日志教程【教程】
Python网络异常模拟_测试说明【指导】
Django 密码修改后会话失效的解决方案
LINUX的SELinux是什么_详解LINUX强制访问控制系统的入门与配置
如何在Golang中处理模块包路径变化_Golang包重命名与导入方法
Win11怎么开启智能存储_Windows11存储感知自动清理文件
php本地部署后数据库连接报错_1045accessdenied错误解决方法详解【汇总】
如何使用Golang template生成文本模板_动态生成HTML或文本
MAC怎么一键隐藏桌面所有图标_MAC极简模式切换与终端指令【方法】
2025-11-05
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。