【问题标题】:Add datepicker field to plugin settings page in Wordpress将 datepicker 字段添加到 Wordpress 中的插件设置页面
【发布时间】:2014-06-02 21:50:59
【问题描述】:

我正在开发一个简单的插件(我的第一个 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();
});

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

【问题讨论】:

    标签: php jquery wordpress datepicker


    【解决方案1】:

    由于您的代码不可编译,我将根据您的示例代码框架发布一个工作示例。要求: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();
    });
    

    【讨论】:

      【解决方案2】:

      为了加载波纹管脚本和样式,在主题 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'); 
      

      只需将此代码也放入 functions.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');
          ?>
      

      您将在 Admin Menu->Settigns->Date Picker 上获得一个日期选择器。查看更多详情Add a jQuery DatePicker to WordPress Theme or Plugin

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-09
        • 1970-01-01
        • 2016-08-16
        • 1970-01-01
        • 2017-05-14
        • 1970-01-01
        • 2016-08-15
        相关资源
        最近更新 更多