如何保存多个Metabox值?
我有三个字段,像下面的图片。

我应该使用下面的代码吗?
if (isset($_POST['name'])) {
update_post_meta($post_id, 'name', sanitize_text_field($_POST['name']));
}
if (isset($_POST['address'])) {
update_post_meta($post_id, 'address', sanitize_text_field($_POST['address']));
}
if (isset($_POST['phone'])) {
update_post_meta($post_id, 'phone', sanitize_text_field($_POST['phone']));
}有办法保存多个metabox值吗?
发布于 2022-07-03 09:02:32
我不知道这段代码在哪里,如果它在ajax或post事件的回调中,但这并不重要。
假设您的代码按预期工作,您可以让它更容易管理,假设您还有另外7个需要更新的元字段,您需要每次复制粘贴您的if条件,这并不理想。
PHP还有一个处理请求的内置函数,filter_input,该函数允许您根据需要对请求数据进行清理和验证,有许多用于数据类型和公共值(如电子邮件)的标志。
所以你可以做这样的事
$fields = [
'name' => FILTER_SANITIZE_STRING,
'address' => FILTER_SANITIZE_STRING,
'phone' => FILTER_SANITIZE_NUMBER_INT,
];
foreach ($fields as $field_name => $flag) {
if (!empty($field = filter_input(INPUT_POST, $field_name, $flag))) {
update_post_meta($post_id, $field_name, sanitize_text_field($field));
}
}因此,现在如果您需要添加另一个字段,比如email,您可以只更新$field数组,而不是创建一个新的条件。这
$fields = [
'name' => FILTER_SANITIZE_STRING,
'address' => FILTER_SANITIZE_STRING,
'phone' => FILTER_SANITIZE_NUMBER_INT,
'email' => FILTER_SANITIZE_EMAIL
];而不是另一个
if (isset($_POST['email'])) {
update_post_meta($post_id, 'phone', sanitize_text_field($_POST['email']));
}https://wordpress.stackexchange.com/questions/407293
复制相似问题