在 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