首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建wordpress Widget多个实例

创建wordpress Widget多个实例
EN

Stack Overflow用户
提问于 2013-10-25 20:23:14
回答 1查看 1.8K关注 0票数 2

我创建了一个wordpress小部件(一个带有两个字段的表单),并将其显示在后台办公室。

一切都很好,我可以用它来创建一个记录并显示在前面,但我真正想要做的是能够使用它从后台创建许多记录(比如帖子),并将它们显示在网站的前端。

在前台发布了记录:(我想要的)

代码语言:javascript
复制
Record1               |     Record2               |     Record3
-------------------------------------------------------------------------------
Title:    Title1      |     Title:    Title2      |     Title:    Title3
Price:    Price1      |     Price:    Price2      |     Price:    Price3

在前台发布了记录:(我实际拥有的)

代码语言:javascript
复制
Record               
----------------------
Title:    Title      
Price:    Price      

这是我的密码:

代码语言:javascript
复制
class wp_ikbal extends WP_Widget {

    // constructor
    function wp_ikbal() {
        parent::WP_Widget(false, $name = __('Ikbal Widget', 'wp_ikbal') );
    }

    // widget form creation
    function form($instance) {  
        // Check values
        if( $instance) {
            $Title = esc_attr($instance['text']);
            $Price = esc_textarea($instance['textarea']);
        } else {
            $Title = '';
            $Price = '';
        }
        ?>

        <p>
            <label for="<?php echo $this->get_field_id('Title'); ?>"><?php _e('Nom Produit:', 'wp_ikbal'); ?></label>
            <input class="widefat" id="<?php echo $this->get_field_id('Title'); ?>" name="<?php echo $this->get_field_name('Title'); ?>" type="text" value="<?php echo $Title; ?>" />
        </p>

        <p>
            <label for="<?php echo $this->get_field_id('Price'); ?>"><?php _e('Price:', 'wp_ikbal'); ?></label>
            <textarea class="widefat" id="<?php echo $this->get_field_id('Price'); ?>" name="<?php echo $this->get_field_name('Price'); ?>"><?php echo $Price; ?></textarea>
        </p>
        <?php
    }

    // widget update
    function update($new_instance, $old_instance) {
        $instance = $old_instance;
        // Fields
        $instance['Title'] = strip_tags($new_instance['Title']);
        $instance['Price'] = strip_tags($new_instance['Price']);
        return $instance;
    }

    // widget display
    function widget($args, $instance) {
        extract( $args );
        // these are the widget options
        $text = $instance['Title'];
        $textarea = $instance['Price'];
        echo $before_widget;
        // Display the widget
        echo '<div class="widget-text wp_widget_plugin_box">';

        // Check if text is set
        if( $Title ) {
            echo '<p class="wp_widget_plugin_text">'.$Title.'</p>';
        }

        // Check if textarea is set
        if( $Price ) {
            echo '<p class="wp_widget_plugin_textarea">'.$Price.'</p>';
        }

        echo '</div>';
        echo $after_widget;
    }
}

// register widget
add_action('widgets_init', create_function('', 'return register_widget("wp_ikbal");'));

我该怎么做?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-10-26 03:47:35

您需要可重复的字段,这里的答案将是逐字的这个在WPSE。基本上:

  1. 在Widget构造函数中,添加一个admin_enqueue_scripts来加载所需的jQuery (或者您可以将它内联到form()中)。
  2. form()中,添加标记以具有输入的“模板”,并由jQuery用于复制字段。
  3. update()中,迭代发布的字段并相应地保存。

资源:

PS:您可能会发现,当Widget第一次放入侧栏时,jQuery就不工作了。解决方案是这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19598801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档