Ich möchte ein Post-Widget erstellen und Kategorien auswählen können

Können Sie mir bitte sagen, wie ich ein WordPress-Posts-Widget erstellen kann, das Posts basierend auf einer Kategorieauswahl ausgibt (Kategorie-Checkboxen aller Post-Kategorien)?

Dies ist in meiner Form function:

 

Im Moment habe ich mich für das Hinzufügen von Kategorien Slug in einem Textfeld entschieden und verwende das Argument 'category_name' in WP_Query

Ich kann einfach nicht meinen Kopf darum wickeln. Danke für jede Hilfe.

Solutions Collecting From Web of "Ich möchte ein Post-Widget erstellen und Kategorien auswählen können"

Ich habe kürzlich ein Widget geschrieben, das

  • Ruft alle Begriffe aus der Build-in-Taxonomie- category und fügt sie im Drop-down-Menü des Widgets hinzu

  • Speichert die ausgewählte Kategorie und verwendet diese Kategorie in einer benutzerdefinierten WP_Query , um Beiträge aus der ausgewählten Kategorie WP_Query und anzuzeigen

Sie können durchsehen und nach Bedarf anpassen: ( Benötigt PHP 5.4+ )

( EDIT: Danke @birgire für die Verwendung von array() und [] -Notation. Korrigiert, nur [] )

 < ?php /** * Category_Posts widget class * * Displays posts from a selected category * * @since 1.0.0 */ class Category_Posts extends WP_Widget { public function __construct() { parent::__construct( 'widget_category_posts', _x( 'Category Posts Widget', 'Category Posts Widget' ), [ 'description' => __( 'Display a list of posts from a selected category.' ) ] ); $this->alt_option_name = 'widget_category_posts'; add_action( 'save_post', [$this, 'flush_widget_cache'] ); add_action( 'deleted_post', [$this, 'flush_widget_cache'] ); add_action( 'switch_theme', [$this, 'flush_widget_cache'] ); } public function widget( $args, $instance ) { $cache = []; if ( ! $this->is_preview() ) { $cache = wp_cache_get( 'widget_cat_posts', 'widget' ); } if ( ! is_array( $cache ) ) { $cache = []; } if ( ! isset( $args['widget_id'] ) ) { $args['widget_id'] = $this->id; } if ( isset( $cache[ $args['widget_id'] ] ) ) { echo $cache[ $args['widget_id'] ]; return; } ob_start(); $title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Category 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; } $cat_id = $instance['cat_id']; $random = $instance['rand'] ? true : false; $excerpt = $instance['excerpt'] ? true : false; $thumbnail = $instance['thumbnail'] ? true : false; /** * Filter the arguments for the Category Posts widget. * * @since 1.0.0 * * @see WP_Query::get_posts() * * @param array $args An array of arguments used to retrieve the category posts. */ if( true === $random ) { $query_args = [ 'posts_per_page' => $number, 'cat' => $cat_id, 'orderby' => 'rand' ]; }else{ $query_args = [ 'posts_per_page' => $number, 'cat' => $cat_id, ]; } $q = new WP_Query( apply_filters( 'category_posts_args', $query_args ) ); if( $q->have_posts() ) { echo $args['before_widget']; if ( $title ) { echo $args['before_title'] . $title . $args['after_title']; } while( $q->have_posts() ) { $q->the_post(); ?> 
>
< ?php the_title( '

', '' ); ?>

< ?php if ( has_post_thumbnail() && true === $thumbnail ) { ?>
< ?php the_post_thumbnail(); ?>
< ?php } if( true === $excerpt ) { ?>
< ?php the_excerpt(); ?>
< ?php } ?>
< ?php } wp_reset_postdata(); } echo $args['after_widget']; if ( ! $this->is_preview() ) { $cache[ $args['widget_id'] ] = ob_get_flush(); wp_cache_set( 'widget_cat_posts', $cache, 'widget' ); } else { ob_end_flush(); } } public function update( $new_instance, $old_instance ) { $instance = $old_instance; $instance['title'] = strip_tags( $new_instance['title'] ); $instance['number'] = (int) $new_instance['number']; $instance['cat_id'] = (int) $new_instance['cat_id']; $instance['rand'] = $new_instance['rand']; $instance['excerpt'] = $new_instance['excerpt']; $instance['thumbnail'] = $new_instance['thumbnail']; $this->flush_widget_cache(); $alloptions = wp_cache_get( 'alloptions', 'options' ); if ( isset($alloptions['widget_category_posts']) ) delete_option('widget_category_posts'); return $instance; } public function flush_widget_cache() { wp_cache_delete('widget_cat_posts', 'widget'); } public function form( $instance ) { $title = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : ''; $number = isset( $instance['number'] ) ? absint( $instance['number'] ) : 5; $cat_id = isset( $instance['cat_id'] ) ? absint( $instance['cat_id'] ) : 1; $random = isset( $instance['rand'] ) ? $instance['rand'] : false; $excerpt = isset( $instance['excerpt'] ) ? $instance['excerpt'] : false; $thumbnail = isset( $instance['thumbnail'] ) ? $instance['thumbnail'] : false; ?>

< ?php $checked = ( $random ) ? ' checked=\"checked\" ' : ''; ?> />

< ?php $checked = ( $excerpt ) ? ' checked=\"checked\" ' : ''; ?> />

< ?php $checked = ( $thumbnail ) ? ' checked=\"checked\" ' : ''; ?> />

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