Wordpress已经包含了jQuery日期选择器。因此,您可以将默认WP脚本排队。然而,据我所知,WP不包括日期选择器所需的样式
因此,请尝试将WP脚本排队,例如,来自外部源的样式:
function my_datepicker_enqueue() {
wp_enqueue_script( \'jquery-ui-datepicker\' ); // enqueue datepicker from WP
wp_enqueue_style( \'jquery-ui-style\', \'//ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/base/jquery-ui.css\', true);
}
add_action( \'admin_enqueue_scripts\', \'my_datepicker_enqueue\' );
创建一个新的HTML输入字段,至少包含一个类和一个名称。输入字段的HTML:(您已经定义了一些输入字段,所以跳到脚本)
<input type="text" name="_custom_datepicker[]" id="_custom_datepicker[]" class="my-custom-datepicker-field" value="<?php echo $your_saved_value; ?>" />
然后添加一个脚本来初始化新元素的日期选择器。Script:(确保您以正确的输入元素为目标,我们在这里查看定义的类,因为我们要使用多个实例。)
jQuery(document).ready(function($){
$(\'.my-custom-datepicker-field\').datepicker({
dateFormat: \'dd-mm-yy\', //maybe you want something like this
showButtonPanel: true
});
});
<小时>
Update:起初我在阅读您的代码时遇到一些问题,您的代码中也有一些错误。首先,我看到了同样奇怪的行为。我现在在一个开发站点上安装了一个testplugin,现在它正在那里工作。
1: 您设置了保存功能,这样就不能只输入日期并保存。您必须添加金额、标题或描述才能保存。我想这是你的意图?
2: 在保存功能中,您有以下代码:
if ( $reward_descriptions[$i] != \'\' ) :
$reward_data[$i][\'reward_date\'] = stripslashes( $reward_dates[$i] );
endif;
因此,只有当描述字段不为空时,才能保存日期?!似乎这是一个输入错误,因为其他字段看起来不错。更改为:
if ( $reward_data[$i] != \'\' ) :
$reward_data[$i][\'reward_date\'] = stripslashes( $reward_dates[$i] );
endif;
3: 在回调代码中,有以下字段作为日期选择器字段:
<td><input type="text" name="_custom_datepicker[]" id="_custom_datepicker[]" class="my-custom-datepicker-field" value="<?php echo esc_attr( $field[\'reward_date\'] ); ?>" /></td>
以及
<td><input type="text" class="my-custom-datepicker-field" name="_custom_datepicker[]" /></td>
均已命名
_custom_datepicker[]
.但在save函数中,您试图保存名为
reward_date
相反
还有id
应该是唯一的。但你添加了相同的id
到所有日期字段。您只需删除id
从这些字段中,无论如何都不需要它。
4. 如果您想动态添加字段,则需要更改datepicker JS函数。我建议将一个JS文件排队,而不是像您那样内联(多次)加载JS代码。因此,尝试用以下内容替换JS代码:
jQuery(document).ready(function($){
// your default code
$( \'#add-row\' ).on(\'click\', function() {
var row = $( \'.empty-row.screen-reader-text\' ).clone(true);
row.removeClass( \'empty-row screen-reader-text\' );
row.insertBefore( \'#repeatable-fieldset-one tbody>tr:last\' );
return false;
});
$( \'.remove-row\' ).on(\'click\', function() {
$(this).parents(\'tr\').remove();
return false;
});
//changed to be used on dynamic field which gets added and removed from DOM
//if the element with the class .my-custom-datepicker-field gets focus, add datepicker
$(document).on(\'focus\', \'.my-custom-datepicker-field\', function(){
$(this).datepicker({
dateFormat: \'dd-mm-yy\', //maybe you want something like this
showButtonPanel: true
});
});
});
在我修复了这些问题并按照WordPress的要求将JS文件放入队列后,它现在可以工作了。