File "nsfp-featured-post-widget.php"
Full Path: /home/mba/public_html/wp-content-20250807152928/plugins/ns-featured-posts/includes/widgets/nsfp-featured-post-widget.php
File size: 9.15 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* Plugin widgets.
*
* @package NS_Featured_Posts
*/
if ( ! class_exists( 'NSFP_Featured_Post_Widget' ) ) {
/**
* Widget class.
*
* @since 1.0.0
*/
class NSFP_Featured_Post_Widget extends WP_Widget {
/**
* Constructor.
*
* @since 1.0.0
*/
public function __construct() {
$widget_ops = array(
'classname' => 'nsfp_featured_post_widget',
'description' => esc_html__( 'NS Featured Posts Widget', 'ns-featured-posts' ),
'customize_selective_refresh' => true,
);
parent::__construct( 'nsfp-featured-post-widget', esc_html__( 'NS Featured Posts', 'ns-featured-posts' ), $widget_ops );
}
/**
* Echo the widget content.
*
* @since 1.0.0
*
* @param array $args Display arguments.
* @param array $instance The settings for the particular instance of the widget.
*/
public function widget( $args, $instance ) {
$title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : esc_html__( 'Featured Posts', 'ns-featured-posts' );
$title = apply_filters( 'widget_title', $title, $instance, $this->id_base );
$number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 5;
if ( ! $number ) {
$number = 5;
}
$post_type = isset( $instance['post_type'] ) ? esc_attr( $instance['post_type'] ) : 'post';
$post_orderby = isset( $instance['post_orderby'] ) ? esc_attr( $instance['post_orderby'] ) : 'date';
$post_order = isset( $instance['post_order'] ) ? esc_attr( $instance['post_order'] ) : 'desc';
$show_date = isset( $instance['show_date'] ) ? $instance['show_date'] : false;
$nsfp_query = new WP_Query(
apply_filters(
'nsfp_featured_posts_widget_args',
array(
'posts_per_page' => $number,
'no_found_rows' => true,
'post_status' => 'publish',
'ignore_sticky_posts' => true,
'meta_key' => '_is_ns_featured_post',
'meta_value' => 'yes',
'post_type' => $post_type,
'orderby' => $post_orderby,
'order' => $post_order,
)
)
);
echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
if ( ! empty( $title ) ) {
echo $args['before_title'] . esc_html( $title ) . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
?>
<?php if ( $nsfp_query->have_posts() ) : ?>
<ul>
<?php
while ( $nsfp_query->have_posts() ) :
$nsfp_query->the_post();
?>
<li>
<a href="<?php the_permalink(); ?>"><?php get_the_title() ? the_title() : the_ID(); ?></a>
<?php if ( $show_date ) : ?>
<span class="post-date"><?php echo esc_html( get_the_date() ); ?></span>
<?php endif; ?>
</li>
<?php endwhile; ?>
</ul>
<?php wp_reset_postdata(); ?>
<?php endif; ?>
<?php
echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
/**
* Update widget instance.
*
* @since 1.0.0
*
* @param array $new_instance New settings for this instance.
* @param array $old_instance Old settings for this instance.
* @return array Settings to save or bool false to cancel saving.
*/
public function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance['title'] = sanitize_text_field( $new_instance['title'] );
$instance['number'] = absint( $new_instance['number'] );
$instance['post_type'] = sanitize_text_field( $new_instance['post_type'] );
$instance['post_orderby'] = sanitize_text_field( $new_instance['post_orderby'] );
$instance['post_order'] = sanitize_text_field( $new_instance['post_order'] );
$instance['show_date'] = isset( $new_instance['show_date'] ) ? (bool) $new_instance['show_date'] : false;
return $instance;
}
/**
* Output the settings update form.
*
* @since 1.0.0
*
* @param array $instance Current settings.
*/
public function form( $instance ) {
$defaults = array(
'title' => esc_html__( 'Featured Posts', 'ns-featured-posts' ),
'number' => 5,
'post_type' => 'post',
'post_orderby' => 'date',
'post_order' => 'desc',
'show_date' => false,
);
$instance = wp_parse_args( $instance, $defaults );
?>
<p>
<label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_html_e( 'Title:', 'ns-featured-posts' ); ?></label>
<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" />
</p>
<p>
<label for="<?php echo esc_attr( $this->get_field_id( 'number' ) ); ?>"><?php esc_html_e( 'Number of posts to show:', 'ns-featured-posts' ); ?></label>
<input id="<?php echo esc_attr( $this->get_field_id( 'number' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'number' ) ); ?>" type="number" value="<?php echo esc_attr( $instance['number'] ); ?>" class="small-text" />
</p>
<p>
<label for="<?php echo esc_attr( $this->get_field_id( 'post_type' ) ); ?>"><?php esc_html_e( 'Post Type:', 'ns-featured-posts' ); ?></label>
<select id="<?php echo esc_attr( $this->get_field_id( 'post_type' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'post_type' ) ); ?>">
<option value="post" <?php selected( $instance['post_type'], 'post' ); ?>><?php esc_html_e( 'Post', 'ns-featured-posts' ); ?></option>
<option value="page" <?php selected( $instance['post_type'], 'page' ); ?>><?php esc_html_e( 'Page', 'ns-featured-posts' ); ?></option>
<?php
$args = array(
'public' => true,
'_builtin' => false,
);
$post_types_custom = get_post_types( $args, 'objects' );
?>
<?php if ( ! empty( $post_types_custom ) ) : ?>
<?php foreach ( $post_types_custom as $key => $ptype ) : ?>
<?php $name = $ptype->labels->{'name'}; ?>
<option value="<?php echo esc_attr( $key ); ?>" <?php selected( $instance['post_type'], $key ); ?>><?php echo esc_html( $name ); ?></option>
<?php endforeach; ?>
<?php endif; ?>
</select>
</p>
<p>
<label for="<?php echo esc_attr( $this->get_field_id( 'post_orderby' ) ); ?>"><?php esc_html_e( 'Order By:', 'ns-featured-posts' ); ?></label>
<?php
$orderby_choices = array(
'date' => esc_html__( 'Published Date', 'ns-featured-posts' ),
'modified' => esc_html__( 'Modified Date', 'ns-featured-posts' ),
'title' => esc_html__( 'Post Title', 'ns-featured-posts' ),
'name' => esc_html__( 'Post Slug', 'ns-featured-posts' ),
'random' => esc_html__( 'Random', 'ns-featured-posts' ),
'comment_count' => esc_html__( 'Comment Count', 'ns-featured-posts' ),
'menu_order' => esc_html__( 'Menu Order', 'ns-featured-posts' ),
);
$orderby_args = array(
'name' => $this->get_field_name( 'post_orderby' ),
'id' => $this->get_field_id( 'post_orderby' ),
'selected' => $instance['post_orderby'],
);
self::render_select_dropdown( $orderby_choices, $orderby_args );
?>
</p>
<p>
<label for="<?php echo esc_attr( $this->get_field_id( 'post_order' ) ); ?>"><?php esc_html_e( 'Order:', 'ns-featured-posts' ); ?></label>
<?php
$order_choices = array(
'desc' => esc_html__( 'Descending', 'ns-featured-posts' ),
'asc' => esc_html__( 'Ascending', 'ns-featured-posts' ),
);
$order_args = array(
'name' => $this->get_field_name( 'post_order' ),
'id' => $this->get_field_id( 'post_order' ),
'selected' => $instance['post_order'],
);
self::render_select_dropdown( $order_choices, $order_args );
?>
</p>
<p>
<input class="checkbox" type="checkbox" <?php checked( $instance['show_date'] ); ?> id="<?php echo esc_attr( $this->get_field_id( 'show_date' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'show_date' ) ); ?>" />
<label for="<?php echo esc_attr( $this->get_field_id( 'show_date' ) ); ?>"><?php esc_html_e( 'Display post date?', 'ns-featured-posts' ); ?></label>
</p>
<?php
}
/**
* Render select dropdown.
*
* @since 1.0.0
*
* @param array $choices Choices array.
* @param array $main_args Main arguments.
* @return string Rendered markup.
*/
protected function render_select_dropdown( $choices, $main_args ) {
if ( empty( $choices ) || ! is_array( $choices ) ) {
return;
}
$defaults = array(
'id' => '',
'name' => '',
'selected' => 0,
'echo' => true,
);
$r = wp_parse_args( $main_args, $defaults );
$output = '';
if ( ! empty( $choices ) ) {
$output = "<select name='" . esc_attr( $r['name'] ) . "' id='" . esc_attr( $r['id'] ) . "'>\n";
if ( ! empty( $choices ) ) {
foreach ( $choices as $key => $choice ) {
$output .= '<option value="' . esc_attr( $key ) . '" ';
$output .= selected( $r['selected'], $key, false );
$output .= '>' . esc_html( $choice ) . '</option>\n';
}
}
$output .= "</select>\n";
}
if ( $r['echo'] ) {
echo $output;
}
return $output;
}
}
}