I customize the repeat post widget and add little functionalities to it. Everything is working fine but my challenge now is that the widget when used is not bringing out individual post category name. What am I gettin wrong in the widget as it output one post category even though the post link falls into another category.
View my site www.wordpress.bestrackservices/.
I have post in national, economy and others and it keeps showing entertainment even when the post category is not in it.
You will view the complete code of my carousel slider:
<?php
/**
* WP_Widget_Carousel_Slider
*
* @since 2.8.0
*/
class WP_Widget_Carousel_Slider extends WP_Widget {
public function __construct() {
$widget_ops = array(
'classname' => 'widget_carousel_entries',
'description' => __( 'Your site’s most Carousel Slider.', 'bobo'),
'customize_selective_refresh' => true,
);
parent::__construct( 'carousel-slider', __( 'Carousel Slider', 'bobo' ), $widget_ops );
}
/**
* Outputs the content for the current Carousel Slider widget instance.
*
* @since 2.8.0
*
* @param array $args Display arguments including 'before_title', 'after_title',
* 'before_widget', and 'after_widget'.
* @param array $instance Settings for the current Carousel Slider widget instance.
*/
public function widget( $args, $instance ) {
if ( ! isset( $args['widget_id'] ) ) {
$args['widget_id'] = $this->id;
}
$title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Carousel Slider', 'bobo');
/** This filter is documented in wp-includes/widgets/class-wp-widget-pages.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'] : true;
$show_cats = isset( $instance['show_cats'] ) ? $instance['show_cats'] : true;
/**
* Filters the arguments for the Carousel Slider widget.
*
* @since 3.4.0
* @since 4.9.0 Added the `$instance` parameter.
*
* @see WP_Query::get_posts()
*
* @param array $args An array of arguments used to retrieve the Carousel Slider.
* @param array $instance Array of settings for the current widget.
*/
$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,
),
$instance
)
);
if ( ! $r->have_posts() ) {
return;
}
?>
<?php echo $args['before_widget']; ?>
<?php
if ( $title ) {
echo $args['before_title'] . $title . $args['after_title'];
}
?>
<ul>
<?php foreach ( $r->posts as $carousel_post ) : ?>
<?php
$post_title = get_the_title( $carousel_post->ID );
$title = ( ! empty( $post_title ) ) ? $post_title : __( '( title)', 'bobo' );
?>
<li>
<a href="<?php the_permalink( $carousel_post->ID ); ?>"><?php echo $title; ?></a>
<?php if ( $show_date ) : ?>
<span class="post-date"><?php echo get_the_date( '', $carousel_post->ID ); ?></span>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ul>
<?php
echo $args['after_widget'];
}
/**
* Handles updating the settings for the current Carousel Slider widget instance.
*
* @since 2.8.0
*
* @param array $new_instance New settings for this instance as input by the user via
* WP_Widget::form().
* @param array $old_instance Old settings for this instance.
* @return array Updated settings to save.
*/
public function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance['title'] = sanitize_text_field( $new_instance['title'] );
$instance['number'] = (int) $new_instance['number'];
$instance['show_date'] = isset( $new_instance['show_date'] ) ? (bool) $new_instance['show_date'] : true;
$instance['show_cats'] = isset( $new_instance['show_cats'] ) ? (bool) $new_instance['show_cats'] : true;
return $instance;
}
/**
* Outputs the settings form for the Carousel Slider widget.
*
* @since 2.8.0
*
* @param array $instance Current settings.
*/
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'] ) ? (bool) $instance['show_cats'] : true;
$show_date = isset( $instance['show_date'] ) ? (bool) $instance['show_date'] : true;
?>
<p><label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'bobo' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo $title; ?>" /></p>
<p><label for="<?php echo $this->get_field_id( 'number' ); ?>"><?php _e( 'Number of posts to show:', 'bobo' ); ?></label>
<input class="tiny-text" id="<?php echo $this->get_field_id( 'number' ); ?>" name="<?php echo $this->get_field_name( 'number' ); ?>" type="number" step="1" min="1" value="<?php echo $number; ?>" size="3" /></p>
<p>
<p>
<input class="checkbox" type="checkbox" <?php checked( $instance['show_cats'], 'on' ); ?> id="<?php echo $this->get_field_id( 'show_cats' ); ?>" name="<?php echo $this->get_field_name( 'show_cats' ); ?>" />
<label for="<?php echo $this->get_field_id( 'show_cats' ); ?>">Show Category</label>
</p>
<p>
<label for="<?php echo $this->get_field_id('category'); ?>"><?php _e('Category (if selected above):', 'bobo'); ?></label>
<?php
$activeoptions = $instance['category'];
if (!$activeoptions)
{
$activeoptions = array();
}
?>
<select multiple="true" id="<?php echo $this->get_field_id('category'); ?>" name="<?php echo $this->get_field_name('category'); ?>[]" >
<?php
$cats = get_categories('hide_empty=0');
foreach ($cats as $cat) {
$option = '<option value="'.$cat->term_id;
if ( in_array($cat->term_id,$activeoptions)) { $option .='" selected="selected'; }
$option .= '">';
$option .= $cat->cat_name;
$option .= ' ('.$cat->category_count.')';
$option .= '</option>';
echo $option;
}
?>
</select>
</p>
<p><input class="checkbox" type="checkbox"<?php checked( $show_date ); ?> id="<?php echo $this->get_field_id( 'show_date' ); ?>" name="<?php echo $this->get_field_name( 'show_date' ); ?>" />
<label for="<?php echo $this->get_field_id( 'show_date' ); ?>"><?php _e( 'Display post date?' , 'bobo' ); ?></label></p>
<?php
}
}
add_action( 'widgets_init', function ()
{
register_widget( 'WP_Widget_Carousel_Slider' );
});
I customize the repeat post widget and add little functionalities to it. Everything is working fine but my challenge now is that the widget when used is not bringing out individual post category name. What am I gettin wrong in the widget as it output one post category even though the post link falls into another category.
View my site www.wordpress.bestrackservices/.
I have post in national, economy and others and it keeps showing entertainment even when the post category is not in it.
You will view the complete code of my carousel slider:
<?php
/**
* WP_Widget_Carousel_Slider
*
* @since 2.8.0
*/
class WP_Widget_Carousel_Slider extends WP_Widget {
public function __construct() {
$widget_ops = array(
'classname' => 'widget_carousel_entries',
'description' => __( 'Your site’s most Carousel Slider.', 'bobo'),
'customize_selective_refresh' => true,
);
parent::__construct( 'carousel-slider', __( 'Carousel Slider', 'bobo' ), $widget_ops );
}
/**
* Outputs the content for the current Carousel Slider widget instance.
*
* @since 2.8.0
*
* @param array $args Display arguments including 'before_title', 'after_title',
* 'before_widget', and 'after_widget'.
* @param array $instance Settings for the current Carousel Slider widget instance.
*/
public function widget( $args, $instance ) {
if ( ! isset( $args['widget_id'] ) ) {
$args['widget_id'] = $this->id;
}
$title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Carousel Slider', 'bobo');
/** This filter is documented in wp-includes/widgets/class-wp-widget-pages.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'] : true;
$show_cats = isset( $instance['show_cats'] ) ? $instance['show_cats'] : true;
/**
* Filters the arguments for the Carousel Slider widget.
*
* @since 3.4.0
* @since 4.9.0 Added the `$instance` parameter.
*
* @see WP_Query::get_posts()
*
* @param array $args An array of arguments used to retrieve the Carousel Slider.
* @param array $instance Array of settings for the current widget.
*/
$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,
),
$instance
)
);
if ( ! $r->have_posts() ) {
return;
}
?>
<?php echo $args['before_widget']; ?>
<?php
if ( $title ) {
echo $args['before_title'] . $title . $args['after_title'];
}
?>
<ul>
<?php foreach ( $r->posts as $carousel_post ) : ?>
<?php
$post_title = get_the_title( $carousel_post->ID );
$title = ( ! empty( $post_title ) ) ? $post_title : __( '( title)', 'bobo' );
?>
<li>
<a href="<?php the_permalink( $carousel_post->ID ); ?>"><?php echo $title; ?></a>
<?php if ( $show_date ) : ?>
<span class="post-date"><?php echo get_the_date( '', $carousel_post->ID ); ?></span>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ul>
<?php
echo $args['after_widget'];
}
/**
* Handles updating the settings for the current Carousel Slider widget instance.
*
* @since 2.8.0
*
* @param array $new_instance New settings for this instance as input by the user via
* WP_Widget::form().
* @param array $old_instance Old settings for this instance.
* @return array Updated settings to save.
*/
public function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance['title'] = sanitize_text_field( $new_instance['title'] );
$instance['number'] = (int) $new_instance['number'];
$instance['show_date'] = isset( $new_instance['show_date'] ) ? (bool) $new_instance['show_date'] : true;
$instance['show_cats'] = isset( $new_instance['show_cats'] ) ? (bool) $new_instance['show_cats'] : true;
return $instance;
}
/**
* Outputs the settings form for the Carousel Slider widget.
*
* @since 2.8.0
*
* @param array $instance Current settings.
*/
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'] ) ? (bool) $instance['show_cats'] : true;
$show_date = isset( $instance['show_date'] ) ? (bool) $instance['show_date'] : true;
?>
<p><label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'bobo' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo $title; ?>" /></p>
<p><label for="<?php echo $this->get_field_id( 'number' ); ?>"><?php _e( 'Number of posts to show:', 'bobo' ); ?></label>
<input class="tiny-text" id="<?php echo $this->get_field_id( 'number' ); ?>" name="<?php echo $this->get_field_name( 'number' ); ?>" type="number" step="1" min="1" value="<?php echo $number; ?>" size="3" /></p>
<p>
<p>
<input class="checkbox" type="checkbox" <?php checked( $instance['show_cats'], 'on' ); ?> id="<?php echo $this->get_field_id( 'show_cats' ); ?>" name="<?php echo $this->get_field_name( 'show_cats' ); ?>" />
<label for="<?php echo $this->get_field_id( 'show_cats' ); ?>">Show Category</label>
</p>
<p>
<label for="<?php echo $this->get_field_id('category'); ?>"><?php _e('Category (if selected above):', 'bobo'); ?></label>
<?php
$activeoptions = $instance['category'];
if (!$activeoptions)
{
$activeoptions = array();
}
?>
<select multiple="true" id="<?php echo $this->get_field_id('category'); ?>" name="<?php echo $this->get_field_name('category'); ?>[]" >
<?php
$cats = get_categories('hide_empty=0');
foreach ($cats as $cat) {
$option = '<option value="'.$cat->term_id;
if ( in_array($cat->term_id,$activeoptions)) { $option .='" selected="selected'; }
$option .= '">';
$option .= $cat->cat_name;
$option .= ' ('.$cat->category_count.')';
$option .= '</option>';
echo $option;
}
?>
</select>
</p>
<p><input class="checkbox" type="checkbox"<?php checked( $show_date ); ?> id="<?php echo $this->get_field_id( 'show_date' ); ?>" name="<?php echo $this->get_field_name( 'show_date' ); ?>" />
<label for="<?php echo $this->get_field_id( 'show_date' ); ?>"><?php _e( 'Display post date?' , 'bobo' ); ?></label></p>
<?php
}
}
add_action( 'widgets_init', function ()
{
register_widget( 'WP_Widget_Carousel_Slider' );
});
Share
Improve this question
edited Apr 19, 2020 at 13:21
Tom J Nowell♦
61.1k7 gold badges79 silver badges148 bronze badges
asked Apr 19, 2020 at 13:01
Shaibu Stephen OjateShaibu Stephen Ojate
11 bronze badge
1
|
1 Answer
Reset to default 0Ok. That is a good observation. How should i make the adjustment then. Let me know what needs to be done about it to correct how to make it select category?
widget
method that references categories. It appears your widget doesn't show posts from the selected category because you don't tell it to – Tom J Nowell ♦ Commented Apr 19, 2020 at 13:25