一次保存自定义元框所有字段数据
Save custom meta-box all the fields data at once
我在 new-post
页面上有一个自定义元框,允许用户连续添加照片。他可以添加越来越多(任意数量的照片)。
所以,我在保存这些数据时遇到了问题。因为,字段数不一样。
我的代码如下:
if( isset( $_POST[ 'photo-title-1' ] ) ) {
$photos = array(
0 => array($_POST[ 'photo-title-0' ], $_POST[ 'photo-url-0' ], $_POST[ 'photo-desc-0' ]),
1 => array($_POST[ 'photo-title-1' ], $_POST[ 'photo-url-1' ], $_POST[ 'photo-desc-1' ]),
2 => array($_POST[ 'photo-title-2' ], $_POST[ 'photo-url-2' ], $_POST[ 'photo-desc-2' ])
............................................
............................................
............................................
n => array($_POST[ 'photo-title-n' ], $_POST[ 'photo-url-n' ], $_POST[ 'photo-desc-n' ])
);
$serialized_array = serialize($photos);
update_post_meta( $post_id, 'photos', sanitize_text_field($serialized_array) );
}
如你所见,可以有n个字段,一次保存所有字段的方法是什么?
您可以在 POST
数组中使用 while
进行迭代:
$sum = 0;
while( isset($_POST['photo-title-' . $sum]) ){
$photos[] = array(
$_POST[ 'photo-title-' . $sum ],
$_POST[ 'photo-url-' . $sum ],
$_POST[ 'photo-desc-' . $sum ]
);
$sum++;
}
$serialized_array = serialize($photos);
update_post_meta( $post_id, 'photos', sanitize_text_field($serialized_array) );
编辑
根据评论,POST Array
无法包含所有字段,有一个解决此问题的更新:
$reg = '/^photo\-(title|url|desc)\-(\d+)$/';
$filter = preg_grep($reg, array_keys($_POST));
$photos = array();
foreach($filter as $param){
$index = preg_replace($reg, '', $param);
if( !isset($photos[$index]) ) $photos[$index] = array();
$photos[$index][$param] = $_POST[$param];
}
$serialized_array = serialize($photos);
update_post_meta( $post_id, 'photos', sanitize_text_field($serialized_array) );
如果想在Array
中有连续的索引,可以加上:
$photos = array_values($photos);
我在 new-post
页面上有一个自定义元框,允许用户连续添加照片。他可以添加越来越多(任意数量的照片)。
所以,我在保存这些数据时遇到了问题。因为,字段数不一样。
我的代码如下:
if( isset( $_POST[ 'photo-title-1' ] ) ) {
$photos = array(
0 => array($_POST[ 'photo-title-0' ], $_POST[ 'photo-url-0' ], $_POST[ 'photo-desc-0' ]),
1 => array($_POST[ 'photo-title-1' ], $_POST[ 'photo-url-1' ], $_POST[ 'photo-desc-1' ]),
2 => array($_POST[ 'photo-title-2' ], $_POST[ 'photo-url-2' ], $_POST[ 'photo-desc-2' ])
............................................
............................................
............................................
n => array($_POST[ 'photo-title-n' ], $_POST[ 'photo-url-n' ], $_POST[ 'photo-desc-n' ])
);
$serialized_array = serialize($photos);
update_post_meta( $post_id, 'photos', sanitize_text_field($serialized_array) );
}
如你所见,可以有n个字段,一次保存所有字段的方法是什么?
您可以在 POST
数组中使用 while
进行迭代:
$sum = 0;
while( isset($_POST['photo-title-' . $sum]) ){
$photos[] = array(
$_POST[ 'photo-title-' . $sum ],
$_POST[ 'photo-url-' . $sum ],
$_POST[ 'photo-desc-' . $sum ]
);
$sum++;
}
$serialized_array = serialize($photos);
update_post_meta( $post_id, 'photos', sanitize_text_field($serialized_array) );
编辑
根据评论,POST Array
无法包含所有字段,有一个解决此问题的更新:
$reg = '/^photo\-(title|url|desc)\-(\d+)$/';
$filter = preg_grep($reg, array_keys($_POST));
$photos = array();
foreach($filter as $param){
$index = preg_replace($reg, '', $param);
if( !isset($photos[$index]) ) $photos[$index] = array();
$photos[$index][$param] = $_POST[$param];
}
$serialized_array = serialize($photos);
update_post_meta( $post_id, 'photos', sanitize_text_field($serialized_array) );
如果想在Array
中有连续的索引,可以加上:
$photos = array_values($photos);