Thêm các trường biểu mẫu Widget một cách linh hoạt


11

Tôi đang cố gắng tự động thêm trường biểu mẫu vào tiện ích WordPress. Vì vậy, nếu người dùng muốn thêm một ngày khác vào một sự kiện, họ có thể nhấp vào nút để nhận thêm các trường.

Câu hỏi là: Làm thế nào để lưu các trường đầu vào mới được tạo vào cơ sở dữ liệu của tôi? Tôi có cần phải viết một chức năng cập nhật tùy chỉnh? Bất cứ lời khuyên?

Đây là giao diện của widget: nhập mô tả hình ảnh ở đây

Đây là mã php của tôi cho widget (cho đến nay):

    class Spillelister extends WP_Widget {

    public function Spillelister() {

        $widget_options = array (
            'classname' => 'spillelister-widget',
            'description' => 'Widget for å illustrere spillelister.');

        parent::WP_Widget('spillelister_widget', 'Spilleplan', $widget_options);
    }

    // The actual widget user interface
    public function widget($args, $instance) {

        extract( $args, EXTR_SKIP);
        $title = ( $instance['title'] ) ? $instance['title'] : 'Spilleplan';
        $body = ( $instance['body'] ) ? $instance['body'] : 'Ingen flere forestillinger';

        ?>

            <?php echo $before_widget; ?>
            <?php echo $before_title . $title . $after_title; ?>
            <p><?php echo $body; ?></p>

        <?php
    }

    public function update() {

    }

    public function form() {
    ?>
        <div class="date_stamp">
        <p>
            <label>Dato</label> <input type="text" class="datepicker">
            <br>
            <label>Tid</label> <input type="text">
            <span class="remove">Remove</span>
        </p>
        </div>
        <p>
            <span class="add">Add fields</span>
        </p>

    <?php 
    }


}

function spillelister_init() {
    register_widget('Spillelister');    
}
add_action('widgets_init', 'Spillelister_init');

Bất kỳ lời khuyên, gợi ý hoặc câu trả lời được đánh giá cao. :)


1
Tôi biết tôi đến trễ, nhưng tôi tình cờ gặp chủ đề này và tìm thấy câu trả lời trong một câu trả lời khác: wordpress.stackexchange.com/questions/94617/ trộm Thủ thuật dường như là chuyển các giá trị trở lại dưới dạng một mảng.
alexanderfilatov

Câu trả lời:


5

Câu hỏi thú vị!
Tôi chưa bao giờ thấy các trường lặp lại được sử dụng trong Widgets. Trả lời đầy đủ sẽ đòi hỏi quá nhiều công việc / thời gian, vì vậy tôi sẽ cung cấp cho bạn các liên kết đến các tài nguyên tôi biết và hy vọng bạn sẽ thực hiện công việc này và chia sẻ giải pháp với chúng tôi;)

Tất cả các ví dụ này liên quan đến Meta Box, bạn sẽ cần sao chép các tập lệnh jQuery và điều chỉnh post_metatrường hợp Widgets.


Cảm ơn bạn! Tôi sẽ kiểm tra và đưa ra câu trả lời nếu tôi tìm ra cách giải quyết vấn đề này. Nếu bạn hoặc bất kỳ ai khác tìm thấy bất kỳ tài nguyên nào khác về điều này, xin vui lòng chia sẻ nó :)
Ole Henrik Skogstrøm

1
Không bao giờ phải thử điều này, tuy nhiên nếu bất kỳ ai quản lý để xây dựng một cái gì đó như thế này xin vui lòng gửi giải pháp của bạn dưới đây. :)
Ole Henrik Skogstrøm

2

Đây là một ví dụ về tiện ích động kết xuất hai trường (id hình ảnh và url). nếu bạn nhập id hình ảnh và nhấn "cập nhật", hai trường mới sẽ được thêm vào. Tôi xây dựng nó để tạo ra một sl slick với hình ảnh và url được liên kết.

<?php

class imp_image_slider extends WP_Widget
{
/**
 * imp_image_slider constructor.
 */
public function __construct()
{
    parent::__construct(false, $name = "Impulse Image Slider", array("description" => "Creates Slick Image Slider"));
}

/**
 * @see WP_Widget::widget
 *
 * @param array $args
 * @param array $instance
 */
public function widget($args, $instance)
{
// render widget in frontend
}


/**
 * @see WP_Widget::update
 *
 * @param array $newInstance
 * @param array $oldInstance
 *
 * @return array
 */
public function update($newInstance, $oldInstance)
{
    $instance = $oldInstance;
    $instance['images'] = array();
    $instance['urls'] = array();
    if (isset($newInstance['images'])) {
        foreach ($newInstance['images'] as $key => $value) {
            if (!empty(trim($value))) {
                $instance['images'][$key] = $value;
                $instance['urls'][$key] = $newInstance['urls'][$key];
            }
        }
    }

    return $instance;
}

/**
 * @see WP_Widget::form
 *
 * @param array $instance
 */
public function form($instance)
{
    $images = isset($instance['images']) ? $instance['images'] : array();
    $urls = isset($instance['urls']) ? $instance['urls'] : array();
    $images[] = '';
    $form = '';

    foreach ($images as $idx => $value) {
        $image = isset($images[$idx]) ? $images[$idx] : '';
        $url = isset($urls[$idx]) ? $urls[$idx] : '';
        $form .= '<p>'
            . '<label>Slides:</label>'
            . sprintf(
                '<input type="text" name="%1$s[%2$s]" value="%3$s" class="widefat" placeholder="Image ID">',
                $this->get_field_name('images'),
                $idx,
                esc_attr($image))
            . '</p>'
            . '<p>'
            . sprintf(
                '<input type="text" name="%1$s[%2$s]" value="%3$s" class="widefat" placeholder="Url">',
                $this->get_field_name('urls'),
                $idx,
                esc_attr($url))
            . '</p>';
    }

    echo $form;
}
}

add_action('widgets_init', create_function('', 'return register_widget("imp_image_slider");'));

?>

Xin chào, bạn cũng có thể thêm nhận xét hoặc một số thông tin như cách nó giúp OP ngoài mã được đăng dưới dạng mã chỉ có câu trả lời không được khuyến khích
bravokeyl

1
Xin chào, tôi vừa mới làm. Hy vọng nó giúp.
HKandulla

@HKandulla Cảm ơn bạn rất nhiều. Bạn và mã của bạn là cứu người của tôi một lần nữa Cảm ơn bạn.
Owaiz Yusufi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.