Menambahkan bidang formulir Widget secara dinamis

11

Saya mencoba menambahkan bidang formulir ke widget WordPress secara dinamis. Jadi, jika pengguna ingin menambahkan tanggal lain ke suatu acara, mereka dapat mengklik tombol untuk mendapatkan lebih banyak bidang.

Pertanyaannya adalah: Bagaimana cara menyimpan bidang input yang baru dibuat ke database saya? Apakah saya perlu menulis fungsi pembaruan khusus? Ada tips?

Beginilah tampilan widget: masukkan deskripsi gambar di sini

Ini adalah kode php saya untuk widget (sejauh ini):

    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');

Setiap tips, petunjuk atau jawaban sangat dihargai. :)

Ole Henrik Skogstrøm
sumber
1
Saya tahu saya terlambat, tetapi saya menabrak utas ini dan menemukan jawaban di yang lain: wordpress.stackexchange.com/questions/94617/... Triknya adalah mengembalikan nilai kembali sebagai array.
alexanderfilatov

Jawaban:

5

Pertanyaan menarik!
Saya belum pernah melihat bidang berulang yang digunakan di Widget. Memberi Jawaban lengkap akan membutuhkan terlalu banyak pekerjaan / waktu, jadi saya akan memberi Anda tautan ke sumber yang saya tahu, dan semoga Anda akan membuat ini bekerja dan membagikan solusinya dengan kami;)

Semua contoh ini berhubungan dengan Kotak Meta, Anda harus menyalin skrip jQuery dan menyesuaikannya dengan post_metakasus Widgets.

brasofilo
sumber
Terima kasih! Saya akan memeriksanya dan memberikan jawaban jika saya mengetahui cara menyelesaikannya. Jika Anda atau orang lain menemukan sumber daya lebih lanjut tentang ini, jangan ragu untuk membagikannya :)
Ole Henrik Skogstrøm
1
Jangan pernah mencoba ini, namun jika ada yang berhasil membangun sesuatu seperti ini, silakan kirim solusi Anda di bawah. :)
Ole Henrik Skogstrøm
2

Ini adalah contoh widget dinamis yang merender dua bidang (image-id dan url). jika Anda memasukkan id gambar dan tekan "perbarui", dua bidang baru ditambahkan. Saya membangunnya untuk membuat slilder yang licin dengan gambar dan tautan url.

<?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");'));

?>
HKandulla
sumber
Hai, dapatkah Anda juga menambahkan komentar atau info sebagai cara membantu OP selain kode yang diposkan karena hanya kode yang tidak disarankan
bravokeyl
1
Hai, saya baru saja melakukannya. Semoga ini bisa membantu.
HKandulla
@HKandulla Terima kasih banyak. Anda dan kode Anda adalah penyelamat hidup saya sekali lagi. Terima kasih.
Owaiz Yusufi