首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >WordPress 插件:“即将推出” Widget

WordPress 插件:“即将推出” Widget

作者头像
Denis
发布于 2023-04-15 07:11:48
发布于 2023-04-15 07:11:48
26400
代码可运行
举报
文章被收录于专栏:WordPress果酱WordPress果酱
运行总次数:0
代码可运行

出于维护博客更新频率,或精雕细琢文章时督促自己及时完成,我们会在 WordPress 中把该篇文章设为“定时发布”(Schedule)。如果能在网站显示出这些预定发布的文章,应该会吸引读者继续关注你的博客吧?

思路

把即将推出的文章显示在侧边栏是个好办法,不过很多主题都只能以小工具的形式在侧边栏添加内容。所以,不得言的办法,仍稍显不便。实际上,这个功能和 WordPress 中内置的近期文章 Widget 十分相似。

在 WordPress 的 wp-includes/default-widgets.php 第503行(WordPress 3.3.1,其他版本可能不同)处找到相关代码。

关键语句

找到代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$r = new WP_Query(array('posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'future', 'ignore_sticky_posts' => true));

将 publish 改为 future,应该就可以实现功能。

修改后的完整代码

经过一番尝试,改好的 widget 类代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Upcoming_Posts widget class
 */
class WP_Widget_Upcoming_Posts extends WP_Widget {

    function __construct() {
        $widget_ops = array('classname' => 'widget_upcoming_entries', 'description' => __( "The upcoming posts on your site") );
        parent::__construct('upcoming-posts', __('Upcoming Posts'), $widget_ops);
        $this->alt_option_name = 'widget_upcoming_entries';

        add_action( 'save_post', array(&$this, 'flush_widget_cache') );
        add_action( 'deleted_post', array(&$this, 'flush_widget_cache') );
        add_action( 'switch_theme', array(&$this, 'flush_widget_cache') );
    }

    function widget($args, $instance) {
        $cache = wp_cache_get('widget_upcoming_posts', 'widget');

        if ( !is_array($cache) )
            $cache = array();

        if ( ! isset( $args['widget_id'] ) )
            $args['widget_id'] = $this->id;

        if ( isset( $cache[ $args['widget_id'] ] ) ) {
            echo $cache[ $args['widget_id'] ];
            return;
        }

        ob_start();
        extract($args);

        $title = apply_filters('widget_title', empty($instance['title']) ? __('Upcoming Posts') : $instance['title'], $instance, $this->id_base);
        if ( empty( $instance['number'] ) || ! $number = absint( $instance['number'] ) )
             $number = 10;

        $r = new WP_Query(array('posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'future', 'ignore_sticky_posts' => true));
        if ($r->have_posts()) :
?>
        <?php echo $before_widget; ?>
        <?php if ( $title ) echo $before_title . $title . $after_title; ?>
        <ul>
        <?php  while ($r->have_posts()) : $r->the_post(); ?>
        <li><a href="<?php the_permalink() ?>" title="<?php echo esc_attr(get_the_title() ? get_the_title() : get_the_ID()); ?>"><?php if ( get_the_title() ) the_title(); else the_ID(); ?></a></li>
        <?php endwhile; ?>
        </ul>
        <?php echo $after_widget; ?>
<?php
        // Reset the global $the_post as this query will have stomped on it
        wp_reset_postdata();

        endif;

        $cache[$args['widget_id'] = ob_get_flush();
        wp_cache_set('widget_upcoming_posts', $cache, 'widget');
    }

    function update( $new_instance, $old_instance ) {
        $instance = $old_instance;
        $instance['title'] = strip_tags($new_instance['title']);
        $instance['number'] = (int) $new_instance['number'];
        $this->flush_widget_cache();

        $alloptions = wp_cache_get( 'alloptions', 'options' );
        if ( isset($alloptions['widget_upcoming_entries']) )
            delete_option('widget_upcoming_entries');

        return $instance;
    }

    function flush_widget_cache() {
        wp_cache_delete('widget_upcoming_posts', 'widget');
    }

    function form( $instance ) {
        $title = isset($instance['title']) ? esc_attr($instance['title']) : '';
        $number = isset($instance['number']) ? absint($instance['number']) : 5;
?>
        <p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label>
        <input 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:'); ?></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>
<?php
    }
}

使用方法

将以上代码小心地拷贝进主题的 functions.php 文件中,并添加以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function upcoming_posts_widget_init() {
	register_widget( 'WP_Widget_Upcoming_Posts' );
}
add_action( 'widgets_init', 'upcoming_posts_widget_init' );

在主题的小工具选项中就可以使用了。

插件版

http://wordpress.org/extend/plugins/wp-upcoming-posts-widget/


本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
制作WordPress“带Gravatar头像评论”小工具(集成主题中、含选项)
最近在进一步折腾WordPress 主题的开发,在侧边栏小工具那里想做一个可独立于主题的、类似插件的带头像评论小工具。通过WordPress 官方文档与一些资料大概了解了小工具制作的一些知识,但对于我等PHP 菜鸟,完全自己开发是不可能的;于是在网络上找到了一段代码,分享并备忘一下。 关于WordPress 中小工具的开发,除了WordPress官方文档外,有一篇“阿叔工作室”的文章也不错,点击查看。这里不多说了。 下面的代码得到的“带Gravatar头像评论”小工具可以集成到主题中,小工具后台拥有相关选项
Jeff
2018/01/19
8940
制作WordPress“带Gravatar头像评论”小工具(集成主题中、含选项)
【Wordpress】ajax 实现站内搜索
最近想给自己的博客实现一个 站内搜索 功能,期望整个过程异步实现。这样用户体验度更好。
redszhao
2021/08/09
1.5K0
【Wordpress】ajax 实现站内搜索
自定义wordpress侧边栏小工具
作者:matrix 被围观: 1,726 次 发布时间:2014-01-25 分类:Wordpress | 4 条评论 »
HHTjim 部落格
2022/09/26
3290
自定义wordpress侧边栏小工具
WordPress实现更完善的文章相关推荐功能
子凡把泪雪的相关推荐功能进行了重写,将原来的文章相关推荐功能做了自我感觉非常优秀的改进,相比用其它 WordPress 相关文章推荐的插件来说,我更喜欢自己来折腾,经过这一番的重写 WordPress 相关推荐,泪雪的相关文章推荐已经得到了更加完善的推荐适配。
张子凡
2023/01/09
6990
WordPress实现更完善的文章相关推荐功能
WordPress侧边栏信息统计小工具美化版博客信息统计
创建一个PHP文件:widget-websitestat.php 然后把下面的php代码添加进去
会长君
2023/04/25
5580
WordPress侧边栏信息统计小工具美化版博客信息统计
WordPress侧边栏信息统计小工具
WordPress信息统计小工具图片版,代码基本都是借鉴大佬的,所以如果你觉得太长的话,自己删除或者注释掉一些没用的信息统计
小狐狸说事
2023/11/17
3140
WordPress侧边栏信息统计小工具
Wordpress中文章的特色图像Featured Image究竟存在哪里?
最近项目需要,分析了一下Wordpress的特色图像 Feature Image的上传、保存方式,这一分析觉得Wordpress的数据结构设计还真是有想法。
大江小浪
2019/02/22
1.8K0
Wordpress中文章的特色图像Featured Image究竟存在哪里?
WordPress免插件仅代码实现文章归档模板 II
不多说了,本站目前使用的效果,可以到我的存档页一览,该方法来自zww,感谢原作者,在这之前,建议你: 1、你的博客存档页面地址后面的应该为/articles,而不是常见的/archives 。在英文中,article表示“文章”,而archive意为“档案”,使用archive貌似不那么规范;2、你的博客存档页面应该禁止搜索引擎访问,因为这会造成内容重复(在你启用站点地图插件的情况下)。 折腾功能:代码实现WordPress归档页面模板[WP原生函数篇] 原创作者:zwwooooo 特点: 1. 按
Jeff
2018/01/19
2.4K0
WordPress免插件仅代码实现文章归档模板 II
wordpress实现 ajax 分页加载
由于我们可以在后台使用wp query来输出文章列表,所以我们并不需要文章分页的入口,砍掉了分页入口也避免了搜索引擎抓取这些页面。我们只需要在AJAX 执行的过程中向后台传递一个分页参数,就可以返回这个分页上的文章列表。再返回文章列表的时候,我们还需要返回下一分页的页码,当然如果不是最后一页的话。
李维亮
2021/07/09
1.5K0
全部WordPress查询数组参考
WordPress输出内容时用到最多的就是$args =array( 这个查询数组,这篇文章给大家分享所有的,WordPress查询综合参考
小颖club
2022/04/12
8420
WordPress文章归档页面分组和分页
WordPress 归档页面是一个网站的历史内容存档,它允许用户浏览网站的过去内容。它的存在有以下几个意义:
楚客追梦
2024/08/07
3790
WordPress 代码实现相关文章(列表模式)功能
之前分享的相关文章代码化功能是仿无觅的图文模式,现在分享的一个是文章列表陈列模式。代码最初来自 Willin Kan,经过zwwooooo 的修改优化。不得不说,这个代码所实现的相关文章的相关度非常高
Jeff
2018/01/19
1.1K0
wordpress调用置顶文章sticky_posts的三种方法
  有时我们在开发wordpress时需要调用置顶文章sticky_posts,怎么调用呢?几种写法,有用到query_post的,有用到WP_Query,也有用到is_sticky(),下面随ytkah一起来看看吧
ytkah
2019/09/25
1K0
wordpress 实现分页
需要注意的是页面参数不能使用 page https://ask.csdn.net/questions/843250
切图仔
2022/09/14
7330
为WordPress添加自定义设置上传头像功能
虽热这个功能使用场景和频率都非常低,但在有时候还是需要WordPress来显示头像的,但是 zuanmang.net并不是每个人都有注册设置Gravatar头像。所以便需要我们手动为WordPress添加后台可自定义上传头像的功能,如下:
AlexTao
2020/08/05
1.5K0
WordPress主题开发,从入门到精通。
相关文档:https://www.wpzhiku.com/document/wordpress-plugin-basics/
房东的狗丶
2023/02/17
11.2K0
wordpress 学习笔记 (二)
例子: [is_archive] => 1 归档类页面 [is_catgory] => 1 分类目录的页面
青梅煮码
2023/01/16
1.1K0
我又搬博客了 — 和WordPress那些不得不说的事
原来的博客系统使用的是Typecho,一个轻量、高效、快速的博客系统(至今也是)。但是Typecho的正式版已经很久没有更新,其中部分功能甚至无法兼容PHP 7;开发版虽然仍在坚持更新,但是也容易与各种过老的插件和主题产生兼容问题,并且社区的活跃度也略低,开发兴趣不高,最终导致的结果就是插件和主题不够多,功能实现全靠自己写的情况。而现在将全站迁移至WordPress也是无奈之举,一方面是更好的生态,意味着更多插件和主题选择,减少了重复造轮子魔改程序的情况,另一方面是WordPress有更频繁的更新频率,漏洞和Bug能更快得到修补。(等啥时候Typecho重出江湖我就换回来?)
蒟蒻
2023/11/16
4130
我又搬博客了 — 和WordPress那些不得不说的事
wordpress调用函数大全
WordPress Header头部 PHP代码 (注: 也就是位于<head>和</head>之间的PHP代码)
纯情
2023/04/26
7080
五个wordpress调用随机文章的方法
  分享几个WordPress不用插件调用随机文章的方法,不仅增强用户粘性,而且当蜘蛛来爬你的文章的时候每次都会有变化,搜索引擎很喜欢。主要用到的是orderby rand参数,下面就随ytkah一起来看看吧
ytkah
2019/10/24
1.2K0
相关推荐
制作WordPress“带Gravatar头像评论”小工具(集成主题中、含选项)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验