1

我创建了一个名为“信息小部件”的小部件,它有一个字段,这里是小部件的代码:

<?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 并保存它,以便我可以在页面中显示它?有人有想法吗?

我希望我不要问很多问题:)谢谢。

4

0 回答 0