如果页面包含用户,则不要删除该页面

时间:2015-09-09 作者:Interactive

我必须做点什么,但我就是想不出一个办法

一方面,我创建了属于公司的页面。所以每个页面都是公司页面
另一方面,我创建了一些用户,这些用户的个人资料中添加了一个自定义字段,该字段包含他们工作的公司的名称。

不,这只是两者之间的联系。所以我得出的结论是,如果一家公司被删除,用户应该被删除,或者至少应该出现一条消息,说明该公司不能被删除,因为仍然有用户连接到该公司。

我想我应该引入某种函数,向页面删除按钮添加一个操作。

这就像你删除了一个用户,WP会询问你该用户的帖子是否分配给了另一个用户。

有人能告诉我更多关于这方面的信息或分享一些想法/想法吗?

=========================================================================
更新
因此,我创建了以下自定义函数,以便在before_delete_post<注意:出于输出目的,这是在公司页面上测试的。我使用$_GET["company"] 请求,因为名称已在URL中传递。

global $post;
$company = $_GET[\'company\'];
$employees = $wpdb->get_results("
             SELECT meta_value 
             FROM $wpdb->usermeta 
             WHERE meta_key = \'company\' 
             AND meta_value=\'$company\'"
             );

/* 
output $employees: 
[0] => stdClass Object
    (
        [meta_value] => company_name
    )
*/

if(in_array($company, $employees)){
    echo \'Yes\';
}else{
    echo \'No\';
}
假设我想删除该页面company_name. 我要做的是看看这个名字是否在usermeta 桌子如果这是真的,则不应执行删除功能。如果没有,则可以删除该页面。

但这只是不断的回响No 虽然它应该回音Yes 因为我知道页面名是company_name 并且在员工列表中。所以我应该有一场比赛。

2 个回复
最合适的回答,由SO网友:Iamzozo 整理而成

它给出了一个包含对象的数组。所以in_array() 找不到任何东西,你必须先转换它。从wbdb获得结果后:

$employees_array = array();
foreach($employees as $employee) {
    $employees_array[] = $employee->meta_value;
}

if(in_array($company, $employees_array)) {
    ...
}

SO网友:Arjan Kuiken

这可以通过在数据库方案中添加约束来最好地解决。实现这一点的最佳方法是添加外键约束,该约束对“DELETE”操作作出反应。有关外键的更多信息,请阅读:http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

您还可以在调用DELETE操作之前进行选择,如果返回,则用户将退出该函数并出现某种错误。