将特色图像添加到发布显示小工具

时间:2016-12-13 作者:Burak

我有以下插件代码,它将自定义帖子类型显示为最近的帖子小部件。我希望这段代码也能显示帖子的摘要摘录和帖子的特色图片。我应该在哪里添加什么来命名特色图片和摘录文本?

如果你能帮忙,我会很高兴的。

<?php
/**
 * Custom Post Type Recent Posts widget class
 *
 * @since 1.0.0
 * @package Custom Post Type Widgets
 */

class WP_Custom_Post_Type_Widgets_Recent_Posts extends WP_Widget {

    public function __construct() {
        $widget_ops = array( \'classname\' => \'widget_recent_entries\', \'description\' => __( \'Your site’s most recent custom Posts.\', \'custom-post-type-widgets\' ) );
        parent::__construct( \'custom-post-type-recent-posts\', __( \'Recent Posts (Custom Post Type)\', \'custom-post-type-widgets\' ), $widget_ops );
        $this->alt_option_name = \'widget_custom_post_type_recent_posts\';
    }

    public function widget( $args, $instance ) {
        if ( ! isset( $args[\'widget_id\'] ) ) {
            $args[\'widget_id\'] = $this->id;
        }

        $title = apply_filters( \'widget_title\', empty( $instance[\'title\'] ) ? __( \'Recent Posts\', \'custom-post-type-widgets\' ) : $instance[\'title\'], $instance, $this->id_base );
        $posttype = ! empty( $instance[\'posttype\'] ) ? $instance[\'posttype\'] : \'post\';
        if ( empty( $instance[\'number\'] ) || ! $number = absint( $instance[\'number\'] ) ) {
            $number = 5;
        }
        $show_date = isset( $instance[\'show_date\'] ) ? $instance[\'show_date\'] : false;

        $post_types = get_post_types( array( \'public\' => true ), \'objects\' );

        if ( array_key_exists( $posttype, (array) $post_types ) ) {
            $r = new WP_Query( apply_filters( \'widget_posts_args\', array(
                \'post_type\' => $posttype,
                \'posts_per_page\' => $number,
                \'no_found_rows\' => true,
                \'post_status\' => \'publish\',
                \'ignore_sticky_posts\' => true,
            ) ) );

            if ( $r->have_posts() ) : ?>
                <?php echo $args[\'before_widget\']; ?>
                <?php if ( $title ) {
                    echo $args[\'before_title\'] . $title . $args[\'after_title\'];
                } ?>
                <ul>
                <?php while ( $r->have_posts() ) : $r->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 get_the_date(); ?></span>
                    <?php endif; ?>
                    </li>
                <?php endwhile; ?>
                </ul>
                <?php echo $args[\'after_widget\']; ?>
                <?php
                wp_reset_postdata();
            endif;
        }
    }

    public function update( $new_instance, $old_instance ) {
        $instance = $old_instance;
        $instance[\'title\'] = strip_tags( $new_instance[\'title\'] );
        $instance[\'posttype\'] = strip_tags( $new_instance[\'posttype\'] );
        $instance[\'number\'] = (int) $new_instance[\'number\'];
        $instance[\'show_date\'] = isset( $new_instance[\'show_date\'] ) ? (bool) $new_instance[\'show_date\'] : false;
        return $instance;
    }

    public function form( $instance ) {
        $title = isset( $instance[\'title\'] ) ? esc_attr( $instance[\'title\'] ) : \'\';
        $posttype = isset( $instance[\'posttype\'] ) ? $instance[\'posttype\']: \'post\';
        $number = isset( $instance[\'number\'] ) ? absint( $instance[\'number\'] ) : 5;
        $show_date = isset( $instance[\'show_date\'] ) ? (bool) $instance[\'show_date\'] : false;
?>
        <p><label for="<?php echo $this->get_field_id( \'title\' ); ?>"><?php _e( \'Title:\', \'custom-post-type-widgets\' ); ?></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>

        <?php
            $post_types = get_post_types( array( \'public\' => true ), \'objects\' );

            printf(
                \'<p><label for="%1$s">%2$s</label>\' .
                \'<select class="widefat" id="%1$s" name="%3$s">\',
                $this->get_field_id( \'posttype\' ),
                __( \'Post Type:\', \'custom-post-type-widgets\' ),
                $this->get_field_name( \'posttype\' )
            );

            foreach ( $post_types as $post_type => $value ) {
                if ( \'attachment\' === $post_type ) {
                    continue;
                }

                printf(
                    \'<option value="%s"%s>%s</option>\',
                    esc_attr( $post_type ),
                    selected( $post_type, $posttype, false ),
                    __( $value->label, \'custom-post-type-widgets\' )
                );

            }
            echo \'</select></p>\';
        ?>

        <p><label for="<?php echo $this->get_field_id( \'number\' ); ?>"><?php _e( \'Number of posts to show:\', \'custom-post-type-widgets\' ); ?></label>
        <input id="<?php echo $this->get_field_id( \'number\' ); ?>" name="<?php echo $this->get_field_name( \'number\' ); ?>" type="text" value="<?php echo $number; ?>" size="3" /></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?\', \'custom-post-type-widgets\' ); ?></label></p>
<?php
    }
}

1 个回复
SO网友:CodeMascot

您的更新代码-

/**
 * Custom Post Type Recent Posts widget class
 *
 * @since 1.0.0
 * @package Custom Post Type Widgets
 */

class WP_Custom_Post_Type_Widgets_Recent_Posts extends WP_Widget {

    public function __construct() {
        $widget_ops = array( \'classname\' => \'widget_recent_entries\', \'description\' => __( \'Your site’s most recent custom Posts.\', \'custom-post-type-widgets\' ) );
        parent::__construct( \'custom-post-type-recent-posts\', __( \'Recent Posts (Custom Post Type)\', \'custom-post-type-widgets\' ), $widget_ops );
        $this->alt_option_name = \'widget_custom_post_type_recent_posts\';
    }

    public function widget( $args, $instance ) {
        if ( ! isset( $args[\'widget_id\'] ) ) {
            $args[\'widget_id\'] = $this->id;
        }

        $title = apply_filters( \'widget_title\', empty( $instance[\'title\'] ) ? __( \'Recent Posts\', \'custom-post-type-widgets\' ) : $instance[\'title\'], $instance, $this->id_base );
        $posttype = ! empty( $instance[\'posttype\'] ) ? $instance[\'posttype\'] : \'post\';
        if ( empty( $instance[\'number\'] ) || ! $number = absint( $instance[\'number\'] ) ) {
            $number = 5;
        }
        $show_date = isset( $instance[\'show_date\'] ) ? $instance[\'show_date\'] : false;

        $post_types = get_post_types( array( \'public\' => true ), \'objects\' );

        if ( array_key_exists( $posttype, (array) $post_types ) ) {
            $r = new WP_Query( apply_filters( \'widget_posts_args\', array(
                \'post_type\' => $posttype,
                \'posts_per_page\' => $number,
                \'no_found_rows\' => true,
                \'post_status\' => \'publish\',
                \'ignore_sticky_posts\' => true,
            ) ) );

            if ( $r->have_posts() ) : ?>
                <?php echo $args[\'before_widget\']; ?>
                <?php if ( $title ) {
                    echo $args[\'before_title\'] . $title . $args[\'after_title\'];
                } ?>
                <ul>
                    <?php while ( $r->have_posts() ) : $r->the_post(); ?>
                        <li>
                            <?php has_post_thumbnail() ? the_post_thumbnail() : \'\'?>
                            <a href="<?php the_permalink() ?>"><?php get_the_title() ? the_title() : the_ID(); ?></a>
                            <?php if ( $show_date ) : ?>
                                <span class="post-date"><?php echo get_the_date(); ?></span>
                            <?php endif; ?>
                        </li>
                    <?php endwhile; ?>
                </ul>
                <?php echo $args[\'after_widget\']; ?>
                <?php
                wp_reset_postdata();
            endif;
        }
    }

    public function update( $new_instance, $old_instance ) {
        $instance = $old_instance;
        $instance[\'title\'] = strip_tags( $new_instance[\'title\'] );
        $instance[\'posttype\'] = strip_tags( $new_instance[\'posttype\'] );
        $instance[\'number\'] = (int) $new_instance[\'number\'];
        $instance[\'show_date\'] = isset( $new_instance[\'show_date\'] ) ? (bool) $new_instance[\'show_date\'] : false;
        return $instance;
    }

    public function form( $instance ) {
        $title = isset( $instance[\'title\'] ) ? esc_attr( $instance[\'title\'] ) : \'\';
        $posttype = isset( $instance[\'posttype\'] ) ? $instance[\'posttype\']: \'post\';
        $number = isset( $instance[\'number\'] ) ? absint( $instance[\'number\'] ) : 5;
        $show_date = isset( $instance[\'show_date\'] ) ? (bool) $instance[\'show_date\'] : false;
        ?>
        <p><label for="<?php echo $this->get_field_id( \'title\' ); ?>"><?php _e( \'Title:\', \'custom-post-type-widgets\' ); ?></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>

        <?php
        $post_types = get_post_types( array( \'public\' => true ), \'objects\' );

        printf(
            \'<p><label for="%1$s">%2$s</label>\' .
            \'<select class="widefat" id="%1$s" name="%3$s">\',
            $this->get_field_id( \'posttype\' ),
            __( \'Post Type:\', \'custom-post-type-widgets\' ),
            $this->get_field_name( \'posttype\' )
        );

        foreach ( $post_types as $post_type => $value ) {
            if ( \'attachment\' === $post_type ) {
                continue;
            }

            printf(
                \'<option value="%s"%s>%s</option>\',
                esc_attr( $post_type ),
                selected( $post_type, $posttype, false ),
                __( $value->label, \'custom-post-type-widgets\' )
            );

        }
        echo \'</select></p>\';
        ?>

        <p><label for="<?php echo $this->get_field_id( \'number\' ); ?>"><?php _e( \'Number of posts to show:\', \'custom-post-type-widgets\' ); ?></label>
            <input id="<?php echo $this->get_field_id( \'number\' ); ?>" name="<?php echo $this->get_field_name( \'number\' ); ?>" type="text" value="<?php echo $number; ?>" size="3" /></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?\', \'custom-post-type-widgets\' ); ?></label></p>
        <?php
    }
}
主要技巧在这里-

<li>
    <?php has_post_thumbnail() ? the_post_thumbnail() : \'\'?>
    <a href="<?php the_permalink() ?>"><?php get_the_title() ? the_title() : the_ID(); ?></a>
    <?php if ( $show_date ) : ?>
        <span class="post-date"><?php echo get_the_date(); ?></span>
    <?php endif; ?>
</li>