Neues Kontrollkästchen im benutzerdefinierten Widget speichert keine Daten

Ich versuche mein eigenes Widget zu entwickeln. Meistens, weil ich WordPress-functionalität verstehen will (ja, ich bin komplett neu. Versuche zuerst, WordPress zu erweitern)

Ich möchte eine function hinzufügen, um die Post-Thumbnail-Option im aktuellen Post-Widget anzuzeigen.

Ich habe das ursprüngliche Widget kopiert und function für ein neues Kontrollkästchen hinzugefügt (vorerst) Mein Problem ist, dass der Checkbox-Status (aktiviert oder nicht aktiviert) nicht funktioniert. Wenn ich Speichern drücke, wird das Kontrollkästchen deaktiviert. Wenn ich den Wert erzwinge, wird der Code zum Anzeigen einer Miniaturansicht angezeigt.

Hier ist mein aktueller Code Meine Änderungen $show_thumbnail = isset( $instance['show_thumbnail'] ) ? $instance['show_thumbnail'] : false; auf $show_thumbnail = isset( $instance['show_thumbnail'] ) ? $instance['show_thumbnail'] : false; $show_thumbnail = isset( $instance['show_thumbnail'] ) ? $instance['show_thumbnail'] : false;

  'svib_widget_recent_entries', 'description' => __( "Your site’s most recent Posts.") ); parent::__construct('recent-posts', __('Recent Posts'), $widget_ops); $this->alt_option_name = 'svib_widget_recent_entries'; add_action( 'save_post', array($this, 'flush_widget_cache') ); add_action( 'deleted_post', array($this, 'flush_widget_cache') ); add_action( 'switch_theme', array($this, 'flush_widget_cache') ); } function widget($args, $instance) { $cache = array(); if ( ! $this->is_preview() ) { $cache = wp_cache_get( 'svib_widget_recent_posts', 'widget' ); } if ( ! is_array( $cache ) ) { $cache = array(); } if ( ! isset( $args['widget_id'] ) ) { $args['widget_id'] = $this->id; } if ( isset( $cache[ $args['widget_id'] ] ) ) { echo $cache[ $args['widget_id'] ]; return; } ob_start(); extract($args); $title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Recent Posts' ); /** This filter is documented in wp-includes/default-widgets.php */ $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); $number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 5; if ( ! $number ) $number = 5; $show_date = isset( $instance['show_date'] ) ? $instance['show_date'] : false; $show_thumbnail = isset( $instance['show_thumbnail'] ) ? $instance['show_thumbnail'] : false; /** * Filter the arguments for the Recent Posts widget. * * @since 3.4.0 * * @see WP_Query::get_posts() * * @param array $args An array of arguments used to retrieve the recent posts. */ $r = new WP_Query( apply_filters( 'widget_posts_args', array( 'posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'publish', 'ignore_sticky_posts' => true ) ) ); if ($r->have_posts()) : ?>   
    have_posts() ) : $r->the_post(); ?>
  • <a href="https://wordpress.stackexchange.com/questions/143253/new-checkbox-in-custom-widget-isnt-saving-data/">
is_preview() ) { $cache[ $args['widget_id'] ] = ob_get_flush(); wp_cache_set( 'widget_recent_posts', $cache, 'widget' ); } else { ob_flush(); } } function update( $new_instance, $old_instance ) { $instance = $old_instance; $instance['title'] = strip_tags($new_instance['title']); $instance['number'] = (int) $new_instance['number']; $instance['show_date'] = isset( $new_instance['show_date'] ) ? (bool) $new_instance['show_date'] : false; $instance['show_thumbnail'] = isset( $new_instance['show_thumbnail'] ) ? (bool) $new_instance['show_thumbnail'] : false; $this->flush_widget_cache(); $alloptions = wp_cache_get( 'alloptions', 'options' ); if ( isset($alloptions['svib_widget_recent_entries']) ) delete_option('svib_widget_recent_entries'); return $instance; } function flush_widget_cache() { wp_cache_delete('widget_recent_posts', 'widget'); } function form( $instance ) { $title = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : ''; $number = isset( $instance['number'] ) ? absint( $instance['number'] ) : 5; $show_date = isset( $instance['show_date'] ) ? (bool) $instance['show_date'] : false; $show_thumbnail = isset( $instance['show_thumbnail'] ) ? (bool) $instance['show_thumbnail'] : false; ?>

<label for="get_field_id( 'title' ); ?>"> <input class="widefat" id="get_field_id( 'title' ); ?>" name="get_field_name( 'title' ); ?>" type="text" value="" />

<label for="get_field_id( 'number' ); ?>"> <input id="get_field_id( 'number' ); ?>" name="get_field_name( 'number' ); ?>" type="text" value="" size="3" />

<input class="checkbox" type="checkbox" id="get_field_id( 'show_date' ); ?>" name="get_field_name( 'show_date' ); ?>" /> <label for="get_field_id( 'show_date' ); ?>">

<input class="checkbox" type="checkbox" id="get_field_id( 'show_thumbnail' ); ?>" name="get_field_name( 'show_thumbnail' ); ?>" /> <label for="get_field_id( 'show_thumbnail' ); ?>">

<?php } }

Solutions Collecting From Web of "Neues Kontrollkästchen im benutzerdefinierten Widget speichert keine Daten"

Das Problem scheint darin zu liegen, ein Widget neu zu definieren: Ein Widget mit der ID “recent-posts” existiert bereits, und das führt beim Speichern des Widgets zu merkwürdigem Verhalten. Dies ist möglicherweise auf den callback beim Speichern des Widgets in der ursprünglichen WP_Widget_Recent_Posts .

Es ist sowieso keine gute Idee, ein Widget neu zu definieren. Die Widgets-API soll nicht auf diese Weise verwendet werden. Ihr Problem kann mithilfe einer eindeutigen Widget-ID behoben werden. Ersetze ‘recent-posts’ durch eine andere ID in

 parent::__construct('recent-posts', __('Recent Posts'), $widget_ops); 

Und wenn Sie gerade dabei sind, benennen Sie das Widget um, um doppelte Widget-Titel zu vermeiden:

 parent::__construct( 'myplugin-recent-posts', __( 'My plugin: Recent Posts', 'myplugin_textdomain' ), $widget_ops );