Wordpress文章过滤插件开发记录[已完成]

最近使用Wordpress有一个新的需求,可能这个需求已经有插件可以实现了,只可惜实在是没有查到,就准备自己来动手开发一个。

业务功能也很简单,就是显示给游客和登录用户的文章有所区别,而不止是允许不允许阅读,要根据一些指定的配置属性对展示给用户的文章进行过滤,对用户所见进行区别划分

功能描述

功能其实正如文头描述的一样,对用户所见进行区别对待,这个功能使用已经存在的那些插件,比如根据角色来区分显示的内容,这就对后续扩展有所限制,毕竟Wordpress自带的角色只有那么几种,如果后期要增加的类型变多,那就是无能为力了。

所以目前文章过滤机制将采用下面几个方法:

  • 预定义用户分组并分配用户分组
  • 编写文章并指定允许的用户分组
  • 用户阅读,文章过滤

采用以上思路基本可以解决这个需求啦,下面是一些基本流程图。

预定义用户分组并分配用户分组

根据业务属性,预定义一些用户分组,并根据用户业务属性指定用户分组。

Created with Raphaël 2.1.2 开始配置文章过滤功能 定义用户分组 指定用户分组 结束配置文章过滤功能

编写文章并指定允许的用户分组

编写文章,并指定文章允许的用户类型。

Created with Raphaël 2.1.2 开始编写文章 指定文章允许的用户分组 结束编写文章

用户阅读,文章过滤

根据用户分组来展示相应分组的文章,包括游客分组。

Created with Raphaël 2.1.2 开始文章过滤 根据用户分组以及文章允许的用户分组来进行文章过滤 结束文章过滤

计划功能·页面

  • 用户分组管理页面(包括用户分组的新增、修改、删除等功能)
  • 用户编辑页面嵌入分配用户分组功能,计划可以分配到多个分组,采用多选框方式
  • 用户列表页面,增加所属分组列
  • 文章或页面嵌入分配分组功能,即指定用户分组才可以看到这篇文章或者页面
  • 插件目标有用户分组区别的文章可见性功能

功能交互类型

  • 列表功能(用户分组管理页面)
  • 文本表单、多选框表单(用户分组管理页面)
  • 自定义列表字段

存储的数据

  • 用户分组数据(新创建数据表:pfu_user_group[id,name,desc])
  • 用户与分组关系(user_meta
  • 文章或者页面与分组关系(post_meta

界面截图

主页/帮助页面

这里写图片描述

用户分组列表页面

这里写图片描述

添加/编辑用户分组页面

这里写图片描述

配置用户分组页面

这里写图片描述

配置文章分组页面

这里写图片描述

配置完成

配置完成即可正常显示,按照已经分配好的用户分组。

已完成

第二次做Wordpress插件开发,几乎是走的模仿之路,不过我认为多模仿写的好的插件,也不失为一种快速进步的方法,多做思考,多做比较,多做甄选,一定会有自己的风格出来。

下面是插件中使用到的Wordpress内置钩子或者是方法:

方法

  • add_action
  • dbDelta
  • current_user_can
  • add_submenu_page
  • get_user_meta
  • delete_user_meta
  • add_user_meta
  • get_post_meta
  • delete_post_meta
  • add_post_meta
  • get_current_user_id
  • is_super_admin
  • is_user_logged_in
  • menu_page_url
  • plugins_url
  • trigger_error

  • WP_List_Table

Action钩子

  • plugins_loaded
  • _admin_menu
  • edit_user_profile
  • edit_user_profile_update
  • edit_form_after_title
  • save_post
  • pre_get_posts
  • admin_menu

菜单用户分组显示

既然文章内容的显示可以实现分用户分组显示,那网站的其他内容为何不可呢?那就先来拿菜单来做个实现吧!

嗯,经过大半天的搜索,不管是墙内还是墙外都没有找到关于菜单配置页面的钩子,难道Wordpress确实没有提供么?

如下图,就是这个位置,我想添加一些自定义的字段:

这里写图片描述

不过经过进一步搜索,在(wordpress进阶教程(二十五):给菜单项添加字段)找到了个类似的。大体实现起来有点麻烦,需要利用钩子来替代原生的代码实现,比较侵入,不过在没有更好的实现方式之前,可以先拿这个方法来试试。

菜单的分组属性添加

经过一点测试,最终还是改出来了,还是模仿之路,不过还挺管用,虽然在最后的结果过滤有点疑问,就是下面这部分:

/*
    添加过滤文章钩子
*/
add_action( 'pre_get_posts', 'pfu_post_filter_by_user_group' );
function pfu_post_filter_by_user_group($query) {
    if(is_user_logged_in()) {
        $user_id = get_current_user_id();
        //处理文章查询
        if(!is_super_admin( $user_id )) {
            //文章过滤
            // if($query->is_main_query()) {
                //如果登录则根据用户所在分组显示
                $current_user_groups = get_user_meta( $user_id, 'user_group' );
                $query->set('meta_query',array(
                    array(
                        'key' => 'user_group',
                        'value' => $current_user_groups,
                        'compare' => 'IN'
                    )
                )); 
            // }
        }

    }else {
        // if($query->is_main_query()) {
            $query->set('meta_key','user_group');
            $query->set('meta_value', '1' );

        // }

    }
    return $query;

}

这里采用了通盘过滤,只要是存储在wp_posts表中的数据都会根据用户分组被过滤显示最后内容。

当然也尝试了found_posts这个过滤器,不过官网没有文档,也就暂时没查了,不过我认为应该还有更好的过滤文章结果列表或者是菜单的方法。

一些截图

菜单分组设置页面

这里写图片描述

总结

插件暂时开发完毕,代码已经上传到Github,有兴趣的小朋友,可以去下下来看看,这里下载。非常欢迎大家提出建议,才开始写插件,有许多需要改进的地方,慢慢进步!现行谢谢各位。

贴出代码截图
这里写图片描述

各位大神如果有好的建议可以在评论中提出,我定查询改良!先谢谢啦.


继续·开发·记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值