Widget form alanlarını dinamik olarak ekleme


11

Dinamik olarak bir WordPress widget'ına form alanı eklemeye çalışıyorum. Kullanıcı bir etkinliğe başka bir tarih eklemek isterse, daha fazla alan elde etmek için bir düğmeyi tıklayabilir.

Soru şudur: Yeni oluşturulan girdi alanlarını veri tabanıma nasıl kaydederim? Özel güncelleme işlevi yazmam gerekir mi? Herhangi bir ipucu?

Widget şu şekilde görünür: resim açıklamasını buraya girin

Bu widget için benim php kodu (şimdiye kadar):

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

Herhangi bir ipucu, ipucu veya cevap takdir edilmektedir. :)


1
Geç kaldığımı biliyorum, ama bu konuya çarptım ve başka bir cevap buldum: wordpress.stackexchange.com/questions/94617/… Hile değerleri bir dizi olarak geri geçirmek gibi görünüyor.
alexanderfilatov

Yanıtlar:


5

İlginç soru!
Widget'larda kullanılan tekrarlanabilir alanları hiç görmedim. Tam bir cevap vermek çok fazla çalışma / zaman gerektirecektir, bu yüzden size bildiğim kaynaklara bağlantılar vereceğim ve umarım bu işi yaparsınız ve çözümü bizimle paylaşırsınız;)

Tüm bu örnekler Meta Kutuları ile ilgilidir, jQuery komut dosyalarını kopyalamanız post_metave Widget'lar durumuna uyarlamanız gerekir .


Teşekkür ederim! Bunu nasıl çözeceğimi düşünürsem kontrol edip bir cevap vereceğim. Siz veya başka herhangi bir kaynak bu konuda daha fazla kaynak bulursanız lütfen paylaşmaktan çekinmeyin :)
Ole Henrik Skogstrøm

1
Bunu hiç denemedim, ancak herhangi biri böyle bir şey inşa etmeyi başarırsa, lütfen çözümünüzü gönderin. :)
Ole Henrik Skogstrøm

2

Bu, iki alanı (image-id ve url) işleyen dinamik bir widget örneğidir. bir resim kimliği girip "güncelle" ye basarsanız, iki yeni alan eklenir. Ben görüntüleri ve bağlantılı url ile kaygan bir slilder oluşturmak için inşa.

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

?>

Merhaba, ayrıca tavsiye edilmez yorum veya bu kodu yalnızca cevapları olarak yayınlanmıştır koduna ek olarak OP nasıl yardımcı olarak biraz bilgi ekleyebilir
bravokeyl

1
Merhaba, yeni yaptım. Umarım yardımcı olur.
HKandulla

@HKandulla Çok teşekkür ederim. Sen ve kodun bir kez daha hayat kurtarıcısın Teşekkür ederim.
Owaiz Yusufi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.