Widget, um Beiträge in der Seitenleiste basierend auf seinen IDs anzuzeigen

Ich versuche, ein Widget zu erstellen, das Posts in der Seitenleiste anzeigt, die Post-IDs als Eingaben des Benutzers verwenden.

Das Ergebnis meines Codes ist, dass das Widget nur die erste eingegebene ID anzeigt und die anderen ignoriert.

Beispiel: Wenn meine Eingabe im Widget 1236, 1234, 1235 ist, zeigt das Widget-Frontend nur den Post mit der ID 1236 an.

Dies ist der Code meines Widgets:

 'Post in Sidebar lets you choose some App Reviews and show them in the sidebar' ) ); // Description } public function widget( $args, $instance ) { // Frontend extract($args, EXTR_SKIP); echo $before_widget; $title = empty($instance['title']) ? ' ' : apply_filters('widget_title', $instance['title']); if (!empty($title)) echo $before_title . $title . $after_title; // start postInSidebar frontend $wp_query = new WP_Query( array ( 'post_type' => 'post', 'post__in' => array($instance['postsToShow']), 'orderby' => 'post__in' )); ?> have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?> <div id="post-" > 

<a href="https://wordpress.stackexchange.com/questions/99549/widget-to-show-posts-in-the-sidebar-basing-on-its-ids/" title=""> -

No posts yet, go to appearance -> widgets and choose which posts to show here.

'', 'postsToShow' => '' )); $instance['title'] = strip_tags($new_instance['title']); $instance['postsToShow'] = strip_tags($new_instance['postsToShow']); return $instance; } public function form( $instance ) { // Backend $instance = wp_parse_args( (array) $instance, array( 'title' => '', 'postsToShow' => '' )); $title = esc_attr($instance['title']); $postsToShow = esc_attr($instance['postsToShow']); ?>

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

<label for="get_field_id('postsToShow'); ?>"> Posts To Show: <input class="widefat" id="get_field_id('postsToShow'); ?>" name="get_field_name('postsToShow'); ?>" type="text" value="" />

<?php } } add_action( 'widgets_init', function(){ register_widget( 'postInSidebar' ); });

Solutions Collecting From Web of "Widget, um Beiträge in der Seitenleiste basierend auf seinen IDs anzuzeigen"

Versuchen Sie zu ersetzen

 'post__in' => array($instance['postsToShow']), 

mit

 'post__in' => explode(",", $instance['postsToShow']), 

um den post__in mit einem Array zu füttern.

Ihr aktuelles Array sieht folgendermaßen aus

 array("123,456,789") 

aber sollte wie sein

 array("123", "456", "789") 

Wenn $instance['postsToShow'] eine durch Komma getrennte ID-Kette ist, dann erzeugt array($instance['postsToShow']) ein Array, das aus einem Element besteht, das buchstäblich 1236, 1234, 1235 . Das ist nicht das, was Sie wollen .

Benutze php’s explode , um deine Zeichenkette in ein Array zu konvertieren:

 'post__in' => explode( ',', $instance['postsToShow'] )