在Wordpress中以更有条理的方式保存自定义元框数据

时间:2015-12-19 15:05:01

标签: php wordpress metadata meta-boxes

我在new-post页面上添加了一个元框,允许用户添加照片并撰写描述。见附图。

enter image description here

所以,现在我要保存这些数据。正如您所看到的,照片本身也有自己的元数据(标题,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表中存储值......

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表的大量数据不是吗?

有更有条理的方式吗?我应该为这些自定义元数据使用单独的表吗?或者就像我做的那样?

谢谢!

2 个答案:

答案 0 :(得分:2)

您应该将所有元保存在一个多维数组中,如下所示:

// 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 meta保存到WP数据库之前,请记住循环访问数据,在WP中使用适当的卫生功能。

https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data

答案 1 :(得分:0)

将数组存储在1个metakey中,如下所示:

[
    "photo1" => [
        "title" => ...
        "URL" => ...
        "data" => ...
    ],
    "photo2" => [
        "title" => ...
        "URL" => ...
        "data" => ...
    ],
]