如何使用delete_post_meta取消选中acf复选框



我正在做一个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并保存正确的复选框数组

相关内容

  • 没有找到相关文章

最新更新