如何在我的小工具中显示帖子类别名称?

时间:2020-04-19 作者:Shaibu Stephen Ojate

我定制了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&#8217;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\' );
});

1 个回复
SO网友:Shaibu Stephen Ojate

好啊这是一个很好的观察结果。那么我该如何调整呢。让我知道需要做些什么来纠正如何让它选择类别?

相关推荐

get_posts returns all posts

我很难弄明白get_posts 函数返回所有帖子,而不是特定帖子。我有一个帖子类型叫做mall, 其中一种分类法称为shop 有两个术语Compi 和Macho. 在变量中$store_name 当我在中使用变量时,会存储其中一个术语(取决于订单中的产品)terms 对于$malls_args, 我要买所有的购物中心。即使没有存储在变量中的术语$store_name.我尝试硬编码变量并使用\"Copmi\" 内部terms 但我还是能拿到所有的购物中心。add_action( \'woocommerce_