feat(widgets): render icon fields with the universal icon picker

The widget FormRenderer icon case and the nav-menu item icon field now
emit the shared picker (preview + choose/clear + editable text input,
delegated events so lazy forms and repeater rows work). Icon values are
sanitized through aksrt_sanitize_icon_value on both save paths so inline
customsvg- markup survives; the widget admin screen enqueues the picker.
This commit is contained in:
2026-09-06 12:59:12 +08:00
parent f629a4f373
commit 009f9874c0
6 changed files with 30 additions and 20 deletions
+20 -16
View File
@@ -21,18 +21,18 @@ class NavMenuOptions {
if ($hook !== 'nav-menus.php') {
return;
}
$path = get_template_directory() . '/assets/js/admin-nav-menu-senior.js';
if (!file_exists($path)) {
return;
}
wp_enqueue_media();
wp_enqueue_script(
'aksrt-admin-nav-menu-senior',
get_template_directory_uri() . '/assets/js/admin-nav-menu-senior.js',
['jquery'],
(string) filemtime($path),
true
);
aksrt_icon_picker_assets();
$path = get_template_directory() . '/assets/js/admin-nav-menu-senior.js';
if (file_exists($path)) {
wp_enqueue_script(
'aksrt-admin-nav-menu-senior',
get_template_directory_uri() . '/assets/js/admin-nav-menu-senior.js',
['jquery'],
(string) filemtime($path),
true
);
}
}
/**
@@ -57,11 +57,15 @@ class NavMenuOptions {
?>
<p class="field-aksrt-icon description description-wide">
<label for="edit-menu-item-aksrt-icon-<?php echo esc_attr((string) $item_id); ?>">
<?php esc_html_e('图标 class(如 fa fas fa-home)', 'aksrt'); ?><br>
<input type="text" id="edit-menu-item-aksrt-icon-<?php echo esc_attr((string) $item_id); ?>"
class="widefat" name="aksrt_menu_options[<?php echo esc_attr((string) $item_id); ?>][icon]"
value="<?php echo esc_attr($icon); ?>">
<?php esc_html_e('图标', 'aksrt'); ?>
</label>
<?php
echo aksrt_icon_picker_field(
sprintf('aksrt_menu_options[%d][icon]', $item_id),
sprintf('edit-menu-item-aksrt-icon-%d', $item_id),
$icon
);
?>
</p>
<p class="field-aksrt-badge description description-thin">
<label for="edit-menu-item-aksrt-badge-<?php echo esc_attr((string) $item_id); ?>">
@@ -127,7 +131,7 @@ class NavMenuOptions {
$raw = wp_unslash($_POST['aksrt_menu_options'][ $menu_item_db_id ]);
$clean = [
'icon' => sanitize_text_field((string) ($raw['icon'] ?? '')),
'icon' => aksrt_sanitize_icon_value((string) ($raw['icon'] ?? '')),
'badge' => sanitize_text_field((string) ($raw['badge'] ?? '')),
'badge_class' => sanitize_html_class((string) ($raw['badge_class'] ?? '')),
'submenu_s' => !empty($raw['submenu_s']),