我定制了repeat post小部件,并为其添加了一些功能。一切都很好,但我现在面临的挑战是,小部件在使用时并没有显示出单独的帖子类别名称。当小部件输出一个帖子类别时,即使帖子链接属于另一个类别,我又错了什么呢。
查看我的网站www.wordpress。bestrackservices。com/。
我在《国家》、《经济》和《其他》杂志上都有帖子,即使帖子类别不在其中,它也会不断展示娱乐内容。
您将查看我的旋转木马滑块的完整代码:
<?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\' );
});