0

我正在使用 Drupal 7 + 规则。我想创建一个规则,在用户被赋予特定角色时取消发布用户创作的所有节点。

  • 事件 - 更新现有用户帐户后
  • 条件 - 用户具有角色:SelectedRole
  • 行动 - ???

奖励:如果这可以仅限于某种类型的节点,那就更好了。

如果在规则之外有更好的方法来做到这一点,我对其他想法持开放态度。

非常感谢!

4

1 回答 1

1

您可以创建自定义规则集以循环遍历节点或查看批量操作操作。

一个最简单的选择是在您的规则上添加一个自定义 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,以便每次更新用户配置文件时都不会运行该操作。

参考:

于 2013-09-10T10:40:23.050 回答