Merge pull request 'fix(gutenberg): 修复 MediaUpload 未定义与无效块分类' (#86) from worktree-fix-ai-status-403 into main

Reviewed-on: CYL/wordpress-theme-aksrt#86
This commit is contained in:
2026-07-12 14:55:32 +08:00
2 changed files with 66 additions and 21 deletions
+36 -20
View File
@@ -16,10 +16,12 @@
var el = wp.element.createElement;
var Fragment = wp.element.Fragment;
var registerBlockType = wp.blocks.registerBlockType;
var InspectorControls = wp.blockEditor ? wp.blockEditor.InspectorControls : (wp.editor ? wp.editor.InspectorControls : null);
var InnerBlocks = wp.blockEditor ? wp.blockEditor.InnerBlocks : (wp.editor ? wp.editor.InnerBlocks : null);
var RichText = wp.blockEditor ? wp.blockEditor.RichText : (wp.editor ? wp.editor.RichText : null);
var registerBlockTypeRaw = wp.blocks.registerBlockType;
var blockEditor = wp.blockEditor || wp.editor || {};
var InspectorControls = blockEditor.InspectorControls || null;
var InnerBlocks = blockEditor.InnerBlocks || null;
var RichText = blockEditor.RichText || null;
var MediaUpload = blockEditor.MediaUpload || null;
var ColorPicker = wp.components.ColorPicker;
var PanelBody = wp.components.PanelBody;
var SelectControl = wp.components.SelectControl;
@@ -27,7 +29,7 @@
var ToggleControl = wp.components.ToggleControl;
var RangeControl = wp.components.RangeControl;
if (!registerBlockType || !el) return;
if (!registerBlockTypeRaw || !el) return;
// ── Helper: create element shorthand ──
function h(tag, props, children) {
@@ -55,6 +57,33 @@
h('path', { d: 'M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5', fill: 'none', stroke: 'currentColor', strokeWidth: 2 })
);
// Register category BEFORE any registerBlockType (filter-after-register is too late).
if (window.wp.hooks && window.wp.hooks.addFilter) {
wp.hooks.addFilter('blocks.getBlockCategories', 'aksrt/block-categories', function (categories) {
var list = Array.isArray(categories) ? categories.slice() : [];
var hasAksrt = list.some(function (c) { return c && c.slug === CATEGORY; });
if (hasAksrt) return list;
list.push({
slug: CATEGORY,
title: 'AKSRT',
icon: null,
});
return list;
});
}
// WP 6.9+ expects apiVersion 3 for iframe editor compatibility.
function registerBlockType(name, settings) {
settings = settings || {};
if (settings.apiVersion == null) {
settings.apiVersion = 3;
}
if (!settings.category) {
settings.category = CATEGORY;
}
return registerBlockTypeRaw(name, settings);
}
// ================================================================
// 1. Tabs Block
// ================================================================
@@ -627,22 +656,9 @@
},
});
// ── Register block category ──
if (window.wp.hooks && window.wp.hooks.addFilter) {
wp.hooks.addFilter('blocks.getBlockCategories', 'aksrt/block-categories', function (categories) {
var hasAksrt = categories.some(function (c) { return c.slug === CATEGORY; });
if (hasAksrt) return categories;
return categories.concat([{
slug: CATEGORY,
title: 'AKSRT',
icon: BLOCK_ICON,
}]);
});
}
// ── Carousel Block (Gallery → Swiper) ──
if (MediaUpload && InnerBlocks) {
// MediaUpload lives on wp.blockEditor; skip registration if unavailable.
if (MediaUpload) {
registerBlockType('aksrt/carousel', {
title: '轮播图',
icon: 'images-alt2',
+30 -1
View File
@@ -104,6 +104,34 @@ add_action('pre_get_posts', function ($query) {
// Gutenberg 自定义块注册
// ============================================================
// Register category server-side so it exists before JS registerBlockType runs.
// Keep untyped + defensive: some plugins pass unexpected shapes; typed params can 500 the editor.
add_filter('block_categories_all', static function ($categories, $context = null) {
if (!is_array($categories)) {
return $categories;
}
foreach ($categories as $category) {
$slug = '';
if (is_array($category)) {
$slug = (string) ($category['slug'] ?? '');
} elseif (is_object($category) && isset($category->slug)) {
$slug = (string) $category->slug;
}
if ($slug === 'aksrt-blocks') {
return $categories;
}
}
$categories[] = [
'slug' => 'aksrt-blocks',
'title' => 'AKSRT',
'icon' => null,
];
return $categories;
}, 10, 2);
add_action('enqueue_block_editor_assets', function () {
$base_uri = get_template_directory_uri();
$version = wp_get_theme()->get('Version');
@@ -113,7 +141,8 @@ add_action('enqueue_block_editor_assets', function () {
wp_enqueue_script(
'aksrt-gutenberg-blocks',
$base_uri . '/assets/js/gutenberg-blocks.js',
['wp-blocks', 'wp-element', 'wp-components', 'wp-block-editor', 'wp-hooks'],
// wp-media-utils: MediaUpload for carousel block
['wp-blocks', 'wp-element', 'wp-components', 'wp-block-editor', 'wp-hooks', 'wp-media-utils'],
(string) filemtime($blocks_js),
true
);