在 Wordpress 中以更有条理的方式保存自定义元框数据
Save custom meta box data more organized way in Wordpress
我在 new-post
页面上添加了一个元框,允许用户添加照片和写一些描述。见附图。
所以,现在我想保存这个数据。如您所见,照片本身也有自己的元数据(标题、URL 和描述)因此,我想将这些值存储在多维数组中会更有意义。
$photo_meta_data = array(
'photo1' => array('title'=>'aaa', 'url'=>'http://..', 'desc'=>'ffff'),
'photo2' => array('title'=>'aaa', 'url'=>'http://..', 'desc'=>'ffff'),
'photo3' => array('title'=>'aaa', 'url'=>'http://..', 'desc'=>'ffff'),
)
但是,如何做到这一点?这是我卡在我的 metabox 中的代码。
if( isset( $_POST[ 'photo-title1' ] ) ) {
update_post_meta( $post_id, 'photo-title1', sanitize_text_field( $_POST[ 'photo-title1' ] ) );
}
我只是像保存单个值一样保存字段数据。
目前我正在像这样在 wp_postmeta
table 中存储值...
PostId MetaKey Value
175 photo-title1 .....
175 photo-URL1 .....
175 photo-desc1 .....
175 photo-title2 .....
175 photo-URL2 .....
175 photo-desc2 .....
176 photo-title1 .....
176 photo-URL1 .....
176 photo-desc1 .....
所以,wp_postmeta
table 的数据量很大,不是吗?
有没有更有条理的方法来做到这一点?我应该为这些自定义元数据使用单独的 table 吗?还是像我一样做?
谢谢!
在 post 的 1 个元键中存储一个数组,如下所示:
[
"photo1" => [
"title" => ...
"URL" => ...
"data" => ...
],
"photo2" => [
"title" => ...
"URL" => ...
"data" => ...
],
]
您应该像这样将所有元数据保存在一个多维数组中:
// Save the meta value as one multi dimensional array, like below
$photo_data = array(
array(
'title' => 'Name here',
'url' => 'http://example.com',
'description' => 'My description here...'
),
array(
'title' => 'New name here',
'url' => 'http://example.com',
'description' => 'New description here...'
)
);
// Save it using either update_post_meta() or add_post_meta()
update_post_meta( $post_id, 'photo_data', $photo_data );
// Reference it or get it like below later on:
$photo_data = get_post_meta( $post_id, 'photo_data', true );
// Get the values like below...
echo $photo_data[0]['name'];
echo $photo_data[0]['url'];
echo $photo_data[0]['description'];
记得在将 post 元数据保存到 WP 数据库之前循环遍历您的数据,在 WP 中使用适当的卫生功能。
https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data
我在 new-post
页面上添加了一个元框,允许用户添加照片和写一些描述。见附图。
所以,现在我想保存这个数据。如您所见,照片本身也有自己的元数据(标题、URL 和描述)因此,我想将这些值存储在多维数组中会更有意义。
$photo_meta_data = array(
'photo1' => array('title'=>'aaa', 'url'=>'http://..', 'desc'=>'ffff'),
'photo2' => array('title'=>'aaa', 'url'=>'http://..', 'desc'=>'ffff'),
'photo3' => array('title'=>'aaa', 'url'=>'http://..', 'desc'=>'ffff'),
)
但是,如何做到这一点?这是我卡在我的 metabox 中的代码。
if( isset( $_POST[ 'photo-title1' ] ) ) {
update_post_meta( $post_id, 'photo-title1', sanitize_text_field( $_POST[ 'photo-title1' ] ) );
}
我只是像保存单个值一样保存字段数据。
目前我正在像这样在 wp_postmeta
table 中存储值...
PostId MetaKey Value
175 photo-title1 .....
175 photo-URL1 .....
175 photo-desc1 .....
175 photo-title2 .....
175 photo-URL2 .....
175 photo-desc2 .....
176 photo-title1 .....
176 photo-URL1 .....
176 photo-desc1 .....
所以,wp_postmeta
table 的数据量很大,不是吗?
有没有更有条理的方法来做到这一点?我应该为这些自定义元数据使用单独的 table 吗?还是像我一样做?
谢谢!
在 post 的 1 个元键中存储一个数组,如下所示:
[
"photo1" => [
"title" => ...
"URL" => ...
"data" => ...
],
"photo2" => [
"title" => ...
"URL" => ...
"data" => ...
],
]
您应该像这样将所有元数据保存在一个多维数组中:
// Save the meta value as one multi dimensional array, like below
$photo_data = array(
array(
'title' => 'Name here',
'url' => 'http://example.com',
'description' => 'My description here...'
),
array(
'title' => 'New name here',
'url' => 'http://example.com',
'description' => 'New description here...'
)
);
// Save it using either update_post_meta() or add_post_meta()
update_post_meta( $post_id, 'photo_data', $photo_data );
// Reference it or get it like below later on:
$photo_data = get_post_meta( $post_id, 'photo_data', true );
// Get the values like below...
echo $photo_data[0]['name'];
echo $photo_data[0]['url'];
echo $photo_data[0]['description'];
记得在将 post 元数据保存到 WP 数据库之前循环遍历您的数据,在 WP 中使用适当的卫生功能。
https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data