การเพิ่มฟิลด์แบบฟอร์มวิดเจ็ตแบบไดนามิก


11

ฉันพยายามเพิ่มเขตข้อมูลฟอร์มลงในวิดเจ็ต WordPress แบบไดนามิก ดังนั้นหากผู้ใช้ต้องการเพิ่มวันที่อื่นให้กับกิจกรรมพวกเขาสามารถคลิกปุ่มเพื่อรับฟิลด์เพิ่มเติม

คำถามคือ: บันทึกฟิลด์อินพุตที่สร้างใหม่ไปยังฐานข้อมูลของฉันได้อย่างไร ฉันจำเป็นต้องเขียนฟังก์ชั่นอัพเดทแบบกำหนดเองหรือไม่? เคล็ดลับใด ๆ

นี่คือลักษณะที่วิดเจ็ต: ป้อนคำอธิบายรูปภาพที่นี่

นี่คือรหัส php ของฉันสำหรับวิดเจ็ต (จนถึงตอนนี้):

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

คำแนะนำคำแนะนำหรือคำตอบใด ๆ ที่ชื่นชม :)


1
ฉันรู้ว่าฉันมาสาย แต่ฉันชนเข้ากับเธรดนี้และพบคำตอบในอีกคำ: wordpress.stackexchange.com/questions/94617//เคล็ดลับดูเหมือนว่าจะส่งผ่านค่ากลับมาเป็นอาร์เรย์
alexanderfilatov

คำตอบ:


5

คำถามที่น่าสนใจ!
ฉันไม่เคยเห็นฟิลด์ที่ใช้ซ้ำได้ในวิดเจ็ต การให้คำตอบแบบเต็มจะต้องใช้งาน / เวลามากเกินไปดังนั้นฉันจะให้ลิงก์ไปยังแหล่งข้อมูลที่ฉันรู้และหวังว่าคุณจะทำงานนี้และแบ่งปันวิธีแก้ปัญหากับเรา;)

ตัวอย่างทั้งหมดนี้เกี่ยวกับ Meta Boxes คุณจะต้องคัดลอกสคริปต์ jQuery และปรับให้เข้าpost_metaกับกรณีวิดเจ็ต


ขอขอบคุณ! ฉันจะตรวจสอบและให้คำตอบถ้าฉันทำงานวิธีแก้ปัญหานี้ หากคุณหรือใคร ๆ หาแหล่งข้อมูลใด ๆ เพิ่มเติมเกี่ยวกับเรื่องนี้โปรดอย่าลังเลที่จะร่วมกัน :)
โอเลเฮนริกSkogstrøm

1
ไม่เคยได้ลองทำสิ่งนี้ แต่ถ้ามีคนใดที่สร้างสิ่งนี้โปรดโพสต์คำตอบของคุณ :)
Ole Henrik Skogstrøm

2

นี่เป็นตัวอย่างของวิดเจ็ตแบบไดนามิกที่แสดงสองฟิลด์ (image-id และ url) หากคุณป้อนรหัสภาพและกด "อัปเดต" จะมีการเพิ่มฟิลด์ใหม่สองฟิลด์ ฉันสร้างมันเพื่อสร้างตัวเลื่อนที่เรียบเนียนด้วยรูปภาพและลิงก์ของ 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");'));

?>

สวัสดีคุณสามารถเพิ่มความคิดเห็นหรือข้อมูลบางส่วนเพื่อช่วย OP นอกเหนือจากรหัสที่โพสต์ในขณะที่รหัสไม่ตอบคำถามเท่านั้น
bravokeyl

1
สวัสดีฉันเพิ่งทำไป หวังว่ามันจะช่วย
HKandulla

@HKandulla ขอบคุณมาก ๆ คุณและรหัสของคุณคือตัวช่วยชีวิตของฉันอีกครั้งขอบคุณ
Owaiz Yusufi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.