위젯 양식 필드를 동적으로 추가


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

재미있는 질문!
위젯에서 반복 가능한 필드가 사용되는 것을 본 적이 없습니다. 완전한 답변을하려면 너무 많은 작업 / 시간이 필요하므로 내가 아는 리소스에 대한 링크를 제공 할 것입니다.

이 모든 예제는 메타 박스를 다루므로 jQuery 스크립트를 복사 post_meta하고 위젯 케이스에 맞게 조정해야 합니다.


감사합니다! 이 문제를 해결하는 방법을 알아 내면 확인해보고 대답하겠습니다. 당신이나 다른 누군가가 이것에 대해 더 많은 자료를 찾으면, 그것을 공유하는 것을 망설이지 마십시오 :)
Ole Henrik Skogstrøm

1
이것을 시도하지 마십시오. 그러나 누군가가 이와 같은 것을 만들면 솔루션을 게시하십시오. :)
Ole Henrik Skogstrøm가

2

다음은 두 개의 필드 (image-id 및 url)를 렌더링하는 동적 위젯의 예입니다. image-id를 입력하고 "update"를 누르면 두 개의 새로운 필드가 추가됩니다. 이미지와 링크 된 URL로 매끄러운 slilder를 만들기 위해 빌드합니다.

<?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.