感谢您的代码。我已经进一步研究了这个问题(这不是一个整数格式问题)。我为数字字段想出的唯一解决方案是修补更多的WP-JS。以下是支持任何输入类型的修改后的完整代码:
add_action(\'print_media_templates\', function(){
?>
<script type="text/html" id="tmpl-custom-gallery-setting">
<h3>Custom Settings</h3>
<label class="setting">
<span><?php _e(\'Text\'); ?></span>
<input type="text" value="" data-setting="ds_text" style="float:left;">
</label>
<label class="setting">
<span><?php _e(\'Textarea\'); ?></span>
<textarea value="" data-setting="ds_textarea" style="float:left;"></textarea>
</label>
<label class="setting">
<span><?php _e(\'Number\'); ?></span>
<input type="number" value="" data-setting="ds_number" style="float:left;" min="1" max="9">
</label>
<label class="setting">
<span><?php _e(\'Select\'); ?></span>
<select data-setting="ds_select">
<option value="option1"> \'Option-1\' </option>
<option value="option2"> \'Option-2\' </option>
</select>
</label>
<label class="setting">
<span><?php _e(\'Bool\'); ?></span>
<input type="checkbox" data-setting="ds_bool">
</label>
</script>
<script>
jQuery(document).ready(function()
{
_.extend(wp.media.gallery.defaults, {
ds_text: \'no text\',
ds_textarea: \'no more text\',
ds_number: "3",
ds_select: \'option1\',
ds_bool: false,
ds_text1: \'dummdideldei\'
});
wp.media.view.Settings.Gallery = wp.media.view.Settings.Gallery.extend({
template: function(view){
return wp.media.template(\'gallery-settings\')(view)
+ wp.media.template(\'custom-gallery-setting\')(view);
},
// this is function copies from WP core /wp-includes/js/media-views.js?ver=4.6.1
update: function( key ) {
var value = this.model.get( key ),
$setting = this.$(\'[data-setting="\' + key + \'"]\'),
$buttons, $value;
// Bail if we didn\'t find a matching setting.
if ( ! $setting.length ) {
return;
}
// Attempt to determine how the setting is rendered and update
// the selected value.
// Handle dropdowns.
if ( $setting.is(\'select\') ) {
$value = $setting.find(\'[value="\' + value + \'"]\');
if ( $value.length ) {
$setting.find(\'option\').prop( \'selected\', false );
$value.prop( \'selected\', true );
} else {
// If we can\'t find the desired value, record what *is* selected.
this.model.set( key, $setting.find(\':selected\').val() );
}
// Handle button groups.
} else if ( $setting.hasClass(\'button-group\') ) {
$buttons = $setting.find(\'button\').removeClass(\'active\');
$buttons.filter( \'[value="\' + value + \'"]\' ).addClass(\'active\');
// Handle text inputs and textareas.
} else if ( $setting.is(\'input[type="text"], textarea\') ) {
if ( ! $setting.is(\':focus\') ) {
$setting.val( value );
}
// Handle checkboxes.
} else if ( $setting.is(\'input[type="checkbox"]\') ) {
$setting.prop( \'checked\', !! value && \'false\' !== value );
}
// HERE the only modification I made
else {
$setting.val( value ); // treat any other input type same as text inputs
}
// end of that modification
},
});
});
</script>
<?php