向用户角色添加功能的正确方式是什么?

时间:2020-01-19 作者:jexyon

第三方插件添加了“编辑预约”功能。我想将此功能分配给已经存在的用户角色“editor”。我在我的子主题中创建了以下函数:

function add_booking_role_to_editor() {
    $role = get_role( \'editor\' ); 
    $role->add_cap( \'edit_booked_appointments\', true ); 
} 
add_action( \'init\', \'add_booking_role_to_editor\');
就我对整个主题的理解而言,用户角色被写入数据库,因此没有必要将此函数挂接到“init”操作中。正确的方法是什么?有没有办法在相应的插件被激活后触发一次?我尝试了“plugins\\u loaded”的动作,但根本不起作用。

1 个回复
最合适的回答,由SO网友:Tim Elsass 整理而成

添加此功能的最佳位置是插件的激活挂钩。您可以调用动态activate_{$plugin} 挂钩,或者更好地使用提供的register_activation_hook 方法

使用上面的代码示例——类似这样的东西就是您想要的:

register_activation_hook( __FILE__, function() {
    $role = get_role( \'editor\' ); 
    $role->add_cap( \'edit_booked_appointments\', true );
} );
同样重要的是,在您的插件停用后,通过注册停用挂钩来清除您所做的任何DB更改:

register_deactivation_hook( __FILE__, function() {
    $role = get_role( \'editor\' ); 
    $role->remove_cap( \'edit_booked_appointments\', true );
} );
注意:这些代码示例正在主插件文件中使用。如果您在该上下文之外使用它,则需要提供主插件文件,而不是magic__FILE__.

相关推荐

在wp_USERS上添加wp_usermeta的自定义SQL查询

我试图使用SQL in()查询WordPress中的用户id列表,并在wp\\u usermeta表中的meta\\u键“is\\u registered”上添加meta\\u值为“Yes”的用户id,但我似乎无法实现这一点。它只返回0个结果。如果我只将IN()与ID的数组一起使用,则效果很好。以下是我正在使用的内容:SELECT DISTINCT wp_users.ID FROM wp_users LEFT JOIN wp_usermeta ON ( wp_users.ID = wp_usermeta.