将datepicker字段添加到Wordpress中的插件设置页面

时间:2014-06-02 21:50:59

标签: php jquery wordpress datepicker

我正在开发一个简单的插件(我的第一个WP插件开发),我正在尝试使用以下代码在插件设置页面中添加datepicker字段:

add_settings_field('example_date_picker', 'Example Date Picker', 'pu_display_date_picker', 'ft_admin.php', '', array());
add_action('admin_enqueue_scripts', 'enqueue_date_picker');

function pu_display_date_picker($args)
{
    extract($args);
    echo '<input type="date" id="datepicker" name="example[datepicker]" value="" class="example-datepicker" />';
}

/**
 * Enqueue the date picker
 */
function enqueue_date_picker()
{
    wp_enqueue_script(
            'field-date-js', 'ft.js', array('jquery', 'jquery-ui-core', 'jquery-ui-datepicker'), time(), true
    );

    wp_enqueue_style('jquery-ui-datepicker');
}

代码来自此post,但我收到此错误:

  

致命错误:调用未定义的函数add_settings_field()   /var/www/html/arubaair/wp-content/plugins/frequent-traveler/frequent-traveler.php   在第41行

我不知道为什么。该插件已安装并处于活动状态,如果我删除该代码,则一切正常。我做错了什么?

更新

我将原始代码更改为此代码:

add_action('admin_enqueue_scripts', 'enqueue_date_picker');

function enqueue_date_picker()
{
    wp_enqueue_script(
            'field-date-js', 'ft.js', array('jquery', 'jquery-ui-core', 'jquery-ui-datepicker'), time(), true
    );

    wp_enqueue_style('jquery-ui-datepicker');
}

文件ft.js位于js插件目录中。然后在我构建表单的页面中,我有这一行:

<input type="date" id="frequent_traveler_from_date" name="frequent_traveler_from_date" value="" class="datepicker" />

ft.js包含此代码:

jQuery(document).ready(function() {
    jQuery('.datepicker').datepicker();
});

它不起作用,我检查页面源并没有加载脚本,为什么?

2 个答案:

答案 0 :(得分:2)

由于您的代码无法编译,我将根据示例代码的框架发布一个工作示例。必需:PHP 5.3,请参阅Lambda functions

add_action( 'admin_menu', function()
{
    $hook = add_menu_page( 
        'Date Pick', 
        'Date Pick', 
        'manage_options', 
        'sub-page-date-picker', 
        function() { 
            echo '<h1>Date Pick</h1>'; 
            echo '<input type="date" id="datepicker" name="example[datepicker]" value="" class="example-datepicker" />';
        }
    );
    # echo $hook; die(); // get the correct hook slug

    add_action( 'admin_enqueue_scripts', function( $hook )
    {
        if( 'toplevel_page_sub-page-date-picker' !== $hook )
            return;

        wp_enqueue_script(
            'field-date-js', 
            plugins_url( '/ft.js', __FILE__ ), 
            array('jquery', 'jquery-ui-core', 'jquery-ui-datepicker'), 
            time(), 
            true
        );
        wp_enqueue_style('jquery-ui-datepicker');
    });
});  

ft.js稍作调整:

jQuery(document).ready(function($) {
    $('.datepicker').datepicker();
});

答案 1 :(得分:0)

用于加载波纹管脚本&amp; style在主题 functions.php 文件中添加风箱代码。

前端使用的脚本

function add_e2_date_picker(){
//jQuery UI date picker file
wp_enqueue_script('jquery-ui-datepicker');
//jQuery UI theme css file
wp_enqueue_style('e2b-admin-ui-css','http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.0/themes/base/jquery-ui.css',false,"1.9.0",false);
}
add_action('wp_enqueue_scripts', 'add_e2_date_picker'); 

后端使用的脚本

function add_e2_date_picker(){
//jQuery UI date picker file
wp_enqueue_script('jquery-ui-datepicker');
//jQuery UI theme css file
wp_enqueue_style('e2b-admin-ui-css','http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.0/themes/base/jquery-ui.css',false,"1.9.0",false);
}
add_action('admin_enqueue_scripts', 'add_e2_date_picker'); 

只需将此代码也放在 funtions.php 文件中,或者将这些代码放在下面。

function register_datepiker_submenu() {
        add_submenu_page( 'options-general.php', 'Date Picker', 'Date Picker', 'manage_options', 'date-picker', 'datepiker_submenu_callback' );
    }

    function datepiker_submenu_callback() { ?>
            <div class="wrap">
             <input type="text" class="datepicker" name="datepicker" value=""/>
            </div>
            <script>
            jQuery(function() {
                jQuery( ".datepicker" ).datepicker({
                    dateFormat : "dd-mm-yy"
                });
            });
            </script> 
    <?php }
        add_action('admin_menu', 'register_datepiker_submenu');
    ?>

您将在管理员菜单 - &gt; Settigns-&gt;日期选择器上找到日期选择器。查看更多详情Add a jQuery DatePicker to WordPress Theme or Plugin