我正在做一个wp插件,人们可以加入/退出一个事件。
我已经做了什么:
我做了一个自定义的帖子类型'门票'与一个ACF复选框,是动态填充的'事件'帖子标题。在单个事件中,人们可以单击一个按钮,该按钮将创建一个带有ACF复选框选中值的票据帖子。如果用户已经有了票证,它将更新票证发布。这一切都很好。
我想要的:
当用户想要退出事件时,必须不检查acf值。我已经尝试了一些东西,如delete_post_meta($RegisterTicket, 'my_custom_field', $eventname );
部分代码:
在这部分代码之前,我定义了ticketpost是否必须创建或更新。然后:
/* Get the current field state */
$field_checked = get_field($field_key, $mypostid);
/* Check if the posttitle already is checked, if so delete_post_meta */
if(is_array($field_checked) && in_array($eventname, $field_checked)) {
delete_post_meta($RegisterTicket, 'my_custom_field', $eventname );
} else {
/* if not already checked, add the title to the array so it will be checked and update_post_meta */
$field_checked[] = $eventname;
update_post_meta($RegisterTicket, 'my_custom_field', $field_checked );
}
update_post_meta($RegisterTicket, 'user', $TheUserID);
delete_post_meta不工作,检查的值没有被检查。如何解决这个问题?
您需要检查delete post meta
将结果赋值给var:
if(is_array($field_checked) && in_array($eventname, $field_checked)) {
$result =delete_post_meta($RegisterTicket, 'my_custom_field', $eventname );
echo '<h1>'.$result.'</h1>';
} else {
/* if not already checked, add the title to the array so it will be checked and update_post_meta */
$field_checked[] = $eventname;
update_post_meta($RegisterTicket, 'my_custom_field', $field_checked );
}
如果它是假的,你需要检查$RegisterTicket是一个post id, 'mycustomfield'和$eventname,其中一个将是不正确的。有时要删除的变量按大小写是错误的。另一种方法是从数据库中提取它,这样就不会出现错误。
$field_checked= get_post_meta($RegisterTicket, 'my_custom_field', true);
或者直接删除包含该字段的所有键
delete_post_meta($RegisterTicket, 'my_custom_field');
搞定了。当ACF复选框将它们的值存储在一个数组中时,我们需要取消对该数组中的值的设置,以使其不被选中。
我是这样做的:
$field_checked = get_field($field_key, $mypostid);
假设$field_checked =一个包含事件1,事件2和事件5的数组
在这种情况下,get_field是一个acf函数(所以它将返回事件1、2和5)。我们也可以在这里使用get_post_meta和相应的变量。然后:
if(is_array($field_checked) && in_array($eventname, $field_checked)) {
if(($key = array_search($eventname, $field_checked)) !== false) {
unset($field_checked[$key]);
}
} else {
$field_checked[] = $eventname;
}
update_post_meta($RegisterTicket, 'my_custom_field', $field_checked );
update_post_meta($RegisterTicket, 'user', $TheUserID);
首先检查值是否存储在数组中,并检查值是否已经在数组中(所以我们检查它是否被检查)。如果是:我们想要将变量从数组中移除。Unset只对键起作用,所以我们需要先用array_search搜索键。然后我们将它unset,这意味着我们将值从数组中删除。
简而言之:如果$eventname = 'Event 5'$field_checked将是事件1和事件2的数组。
update_post_meta将最终更新post并保存正确的复选框数组