我创建了一个名为“信息小部件”的小部件,它有一个字段,这里是小部件的代码:
<?php
add_action('widgets_init','info_init');
//register my widget
function info_init()
{
    register_widget("info_widget");
}
// widget class
class info_widget extends WP_widget 
{
    // Widget Settings
    function info_widget()
    {
        $option = array
        (
            "classname" => "style1",
            "description" => "widget information"
        );
        $this->WP_widget("info-widget","widget d'information",$option);
    }
     // display the widget
    function widget($args,$instance)
    {
        extract($args);
        echo $before_widget;
        echo $before_title.$instance["name"].$after_title;
        echo $after_widget;
    }
     //the form for the widget options
        function form($instance)
    {
        $def = array
        (
            "name" =>"Enter your name"
        );
        $instance = WP_parse_args($instance,$def);
        echo '<p><label for="'.$this->get_field_id("name").'">name :</label>
            <input value="'.$instance["name"].'" type="text" name="'.$this->get_field_name("name").'" id="'.$this->get_field_id("name").'">
        </p>';
    }
     // update the widget  
        function update($new,$old)
    {
        return $new;
    }
}
在“小部件”菜单中,当我将小部件滑动到侧边栏时,小部件的字段会自动获得一个 ID,每次我再次滑动我的小部件时,该字段都会采用一个新的 ID(ID 递增)
对我来说,我创建了一个元框,并且我的小部件与他的字段一起放在了元框中。元框代码:
<?php
add_action('add_meta_boxes','dar_meta_create');
function dar_meta_create()
{
    add_meta_box(  
        'dar_meta', // $id  
        'metabox dardar', // $title   
        'dar_meta_function', // $callback  
        'page', // $page  
        'advanced', // $context  
        'high');
}
// callback
function dar_meta_function($post)
{
    wp_nonce_field(basename(__FILE__), 'dar_nonce');
        //Display My widget
    global $wp_widget_factory;
    $widget = new info_widget(); // create my widget
    $widget->id = 'temp';
    $widget->number = '2'; // give an ID automatically ?????
    ob_start();
    $widget->form(array());
    $form = ob_get_clean();
    // Convert the widget field naming into ones that panels uses
    $exp = preg_quote($widget->get_field_name('____'));
    $exp = str_replace('____', '(.*?)', $exp);
    $form = preg_replace('/'.$exp.'/', "2", $form);
    $widget->form = $form;
    var_dump($widget->form);
}
}
// save meta box
function dar_meta_save($id,$post)
{
// check the autosave
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)  
        return $id; 
            //Save My Widget here ???
}
add_action('save_post','dar_meta_save',1,2);
在“添加新页面”菜单中,我的元框的输出是:
string '<p><label for="widget-info-widget-2-name">Nom :</label>
            <input value="Enter your name" type="text"
name="widgets[2][name]" id="widget-info-widget-2-nom">      </p>'
(length=164)
但我手动提供了 ID( ID = 2)
如何自动为小部件的每个字段提供一个 ID 并保存它,以便我可以在页面中显示它?有人有想法吗?
我希望我不要问很多问题:)谢谢。