widget wordpress

时间:2018-01-06 08:31:06

标签: wordpress

我已经注册了小部件并完成了大部分工作,我想显示5个最新帖子而不是1个特定帖子。我需要的只是帖子的图像和标题。我如何实现这一点,我试图搜索但找不到任何解决方案,如果已经回答请提供链接?

// Creating widget front-end

function widget($args, $instance)
    {
        $post = get_post($instance['post_id']);
        echo $args['before_widget'];
        if ( !empty($instance['widget_title']) ) {
            echo $args['before_title'] . $instance['widget_title'] . $args['after_title'];
        }
        ?>
        <article class="post post-sidebar" itemscope itemtype="https://schema.org/Article">
            <?= get_the_post_thumbnail($post, 'thumbnail', ['itemprop' => 'thumbnail']) ?>
            <h4 itemprop="name">
                <a itemprop="url" href="<?= esc_url( get_permalink($post) ) ?>">
                    <?= get_the_title($post) ?>
                </a>
            </h4>
            <div class="category-info">
                <?php the_category(', ', '', $instance['post_id']) ?>
            </div>
        </article>
        <?php
        echo $args['after_widget'];
    }

function form($instance)
    {
        $widget_title = !empty($instance['widget_title']) ? $instance['widget_title'] : '';
        $post_id      = !empty($instance['post_id']) ? $instance['post_id'] : 1;
        ?>
        <p>
            <label for="<?= $this->get_field_id('widget_title') ?>">
                <?= __('Title of the widget:', 'text-domain') ?>
            </label>
            <input class="widefat" type="text" name="<?= $this->get_field_name('widget_title') ?>" value="<?= $widget_title ?>">
        </p>
        <p>
            <label for="<?= $this->get_field_id('post_id') ?>">
                <?= __('Displaying infomation of post ID:', 'text-domain') ?>
            </label>
            <input type="number" name="<?= $this->get_field_name('post_id') ?>" value="<?= $post_id ?>">
        </p>
        <?php
    }
/**
     * Save back-end form.
     */
    function update($new_instance, $old_instance)
    {
        $instance = [];
        $instance['widget_title'] = sanitize_text_field($new_instance['widget_title']);
        $instance['post_id'] = absint($new_instance['post_id']);
        return $instance;
    }

1 个答案:

答案 0 :(得分:0)

您需要在要显示最新帖子的WordPress主题文件中添加以下代码 -

<?php $catquery = new WP_Query( 'cat=72&posts_per_page=5' ); ?>

<ul>
 <?php while($catquery->have_posts()) : $catquery->the_post(); ?>

<li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></li>

<?php endwhile;
wp_reset_postdata();

?>

此代码的第一行创建一个具有特定类别ID的新WordPress查询。您需要将其替换为您自己的类别ID。它只显示列表中的帖子标题。

您可以通过添加以下代码来更改它以显示完整内容:

<?php $catquery = new WP_Query( 'cat=72&posts_per_page=5' ); ?>

<ul>

<?php while($catquery->have_posts()) : $catquery->the_post(); ?>

<li><h3><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h3>
<ul><li><?php the_content(); ?></li>
</ul>
</li>
<?php endwhile; ?> 
</ul>
<?php wp_reset_postdata(); ?>

您还可以使用the_excerpt替换the_content以显示摘录而不是完整文章。