Formularfelder dynamisch hinzufügen

Ich versuche, ein WordPress-Widget dynamisch zu einem Formularfeld hinzuzufügen. Wenn der Benutzer also einem Ereignis ein anderes Datum hinzufügen möchte, kann er auf eine Schaltfläche klicken, um weitere Felder zu erhalten.

Die Frage ist: Wie speichere ich neu erstellte Eingabefelder in meiner database? Muss ich eine benutzerdefinierte Update-function schreiben? Irgendwelche Tipps?

So sieht das Widget aus: Bildbeschreibung hier eingeben

Das ist mein PHP-Code für das Widget (soweit):

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


Remove

Add fields

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

Irgendwelche Tipps, Hinweise oder Antworten werden geschätzt. 🙂

Solutions Collecting From Web of "Formularfelder dynamisch hinzufügen"

Interessante Frage!
Ich habe nie wiederholbare Felder in Widgets verwendet. Eine vollständige Antwort zu geben, würde zu viel Arbeit / Zeit erfordern, also werde ich Ihnen Links zu den Ressourcen geben, die ich kenne, und hoffentlich werden Sie das schaffen und die Lösung mit uns teilen;)

Alle diese Beispiele befassen sich mit Meta-Boxen. Sie müssen die jQuery-Skripte kopieren und das post_meta an den Widgets-Fall anpassen.

  • Erstellen Sie nach Bedarf mehr Meta-Boxen – WPSE Q & A

  • Wiederholbare benutzerdefinierte Felder in einer Metabox – Gist

     /** * Repeatable Custom Fields in a Metabox * Author: Helen Hou-Sandi * * From a bespoke system, so currently not modular - will fix soon * Note that this particular metadata is saved as one multidimensional array (serialized) */ 
  • Wiederholbare benutzerdefinierte Felder in einer Metabox – ein weiteres Beispiel, keine Beschreibung angegeben. Dieser ist ziemlich interessant, da er den Code zum Sortieren der Felder enthält.

Dies ist ein Beispiel für ein dynamisches Widget, das zwei Felder (Bild-ID und URL) rendert. Wenn Sie eine Bild-ID eingeben und “Aktualisieren” drücken, werden zwei neue Felder hinzugefügt. Ich baue es, um einen Slick mit Bildern und verknüpften URLs zu erstellen.

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

' . '' . sprintf( '', $this->get_field_name('images'), $idx, esc_attr($image)) . '

' . '

' . sprintf( '', $this->get_field_name('urls'), $idx, esc_attr($url)) . '

'; } echo $form; } } add_action('widgets_init', create_function('', 'return register_widget("imp_image_slider");')); ?>