我有一个像这样的领域......
<input type="text" name="summary" value="" required />
...我可以轻松地使用sanitize_text_field和add_post_meta ......
$summary = sanitize_text_field($_POST["summary"]);
add_post_meta( $post_id, 'summary', $summary);
但是当涉及到我需要存储在DB中的额外post_meta时,我不知道如何去做,因为我不知道表单中会有多少其他字段。它会有所不同。
所以额外的表单字段可能是这样的......
<input type="text" name="cat_01" value="" />
<input type="number" name="dog_01" value="" />
<input type="number" name="rabbit_01" value="" />
<input type="text" name="mouse_01" value="" />
<input type="text" name="cat_02" value="" />
<input type="number" name="dog_02" value="" />
<input type="number" name="rabbit_02" value="" />
<input type="text" name="mouse_02" value="" />
...但有时可能会有第3组这些字段,或者第四组等,并且确实没有限制,我不知道会有多少组这些字段。
因此,例如,如果存在第3组这些字段,它们将如下所示:
<input type="text" name="cat_03" value="" />
<input type="number" name="dog_03" value="" />
<input type="number" name="rabbit_03" value="" />
<input type="text" name="mouse_03" value="" />
所以你明白了。
当我不知道自己将会捕捉到什么时,我该如何消毒和添加_post_meta?
干杯。
答案 0 :(得分:12)
为什么不让自己轻松自如,并将所有这些保存在数组中:
<!-- With type -->
<input type="text" name="animal[dog][]" value=""/>
<input type="text" name="animal[cat][]" value="" />
<!-- No Type -->
<input type="text" name="animal[]" value="" />
你明白了吗?
在后端,您可以使用
获取字段if( isset( $_POST['animal'] ) ) {
$sanitized_array = array();
foreach( $_POST['animal'] as $type ) {
if( is_array( $type ) ) {
// This is a type, let's go over that
// If it does not exist, create it
if( ! isset( $sanitized_array[ $type ] ) ) {
$sanitized_array[ $type ] = array();
}
foreach( $type as $value ) {
$sanitized_array[ $type ][] = sanitize_text_field( $value );
}
} else {
// It is not an array, so it's a value instead
$sanitized_array[] = sanitize_text_field( $value );
}
}
// We have our sanitized array, let's save it:
update_post_meta( $post_id, 'animal', $sanitized_array );
}
这是我已经创建的类似于动态完成字段的内容,我们不知道需要保存多少。
我希望这能为您提供如何制作该指南的指南。
答案 1 :(得分:1)
您可以使用foreach
来迭代任意数量的字段。
例如:
foreach($_POST as $name=>$value){
$sanitizedValue = sanitize_text_field($value);
add_post_meta($post_id, $name, $sanitizedValue);
}
答案 2 :(得分:1)
在下面的代码中,我采用了一个限制为4的数组,你可以放置直到你使用了你的动物组。然后检查哪一个被发布然后对该变量进行消息化。
$sanited_array = array();
for($i = 1 ; $i < 4 ; $i++)
{
if(isset($_POST['cat_0'.$i]))
{
$sanited_array['cat'][] = sanitize_text_field($_POST['cat_0'.$i]);
}
if(isset($_POST['dog_0'.$i]))
{
$sanited_array['dog'][] = sanitize_text_field($_POST['dog_0'.$i]);
}
if(isset($_POST['rabbit_0'.$i]))
{
$sanited_array['rabbit'][] = sanitize_text_field($_POST['rabbit_0'.$i]);
}
if(isset($_POST['mouse_0'.$i]))
{
$sanited_array['mouse'][] = sanitize_text_field($_POST['mouse_0'.$i]);
}
}
update_post_meta( $post_id, 'animal', $sanited_array );