我正在使用Drupal 7 + Rules。我想创建一个规则,取消发布用户在被赋予特定角色时创作的所有节点。
BONUS:如果这可能仅限于某种类型的节点,那就更好了。
如果有更好的方法来执行此操作,我会接受其他想法。
非常感谢!
答案 0 :(得分:1)
您可以创建自定义规则集以循环遍历节点或“视图批量操作”操作。
最简单的选择是在规则上添加自定义PHP函数( PHP>执行自定义PHP代码)。当然你必须启用php过滤器核心模块,如果你还没有。
在PHP操作中,您必须获取当前用户的已发布节点的所有nids并循环遍历它们以取消发布它们。我将使用EntityFieldQuery API类,但您也可以使用database functions。
// 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 以便操作不会每次更新用户配置文件时运行。
参考文献: