我正在使用 Drupal 7 + 规则。我想创建一个规则,在用户被赋予特定角色时取消发布用户创作的所有节点。
- 事件 - 更新现有用户帐户后
- 条件 - 用户具有角色:SelectedRole
- 行动 - ???
奖励:如果这可以仅限于某种类型的节点,那就更好了。
如果在规则之外有更好的方法来做到这一点,我对其他想法持开放态度。
非常感谢!
我正在使用 Drupal 7 + 规则。我想创建一个规则,在用户被赋予特定角色时取消发布用户创作的所有节点。
奖励:如果这可以仅限于某种类型的节点,那就更好了。
如果在规则之外有更好的方法来做到这一点,我对其他想法持开放态度。
非常感谢!
您可以创建自定义规则集以循环遍历节点或查看批量操作操作。
一个最简单的选择是在您的规则上添加一个自定义 PHP 函数(PHP > Execute custom PHP code)。当然,如果您还没有启用 php 过滤器核心模块,则必须启用。
在 PHP 操作中,您必须获取当前用户已发布节点的所有 nid 并遍历它们以取消发布它们。我将使用EntityFieldQuery API 类,但您也可以使用数据库 函数。
// Get updated user id
$uid = $account -> uid;
// Get all nodes from user that are of NODE_TYPE and are published
$query = new EntityFieldQuery();
$query
->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'NODE_TYPE')
->propertyCondition('status', 1)
->propertyCondition('uid', $uid);
$result = $query->execute();
$nids = array_keys($result['node']);
// Load all nodes in one go for better performance.
$nodes = node_load_multiple($nids);
foreach ($nodes as $node) {
// set status property to 0 (unpublished)
$node->status = 0;
// re-save the node
node_save($node);
}
我还建议在您使用的条件之前为用户添加一个条件:用户具有角色:(不)SelectedRole,以便每次更新用户配置文件时都不会运行该操作。
参考: