将数据添加到usermeta中的数组并在循环中显示它

时间:2012-08-29 作者:Pollux Khafra

我有一个前端的帖子表单,在那里我上传了一张图片。该图像存储为自定义字段,这很容易做到。但我需要做的是将每个用户的每个唯一图像url存储到他们的usermeta中的一个数组中。我想这样做,这样我就可以向他们显示一个他们已经上传的图像列表,并让他们选择其中一个,而不是上传一个新的。

因此,为了详细说明,我在表单中有一个基本的文件上传选择。

<input type="file" name="music_image" id="music_image"/>
在这下面,我需要一个复选框,向他们显示他们上传的任何其他人的图像,如果他们选择了一个文件,他们就不能选择图像,反之亦然。然后我需要在表单提交时将上传的文件作为usermeta添加到数组中。糟糕的解释,但我认为这是有道理的。

下面是我用来激活表单的内容。

 <?php if( \'POST\' == $_SERVER[\'REQUEST_METHOD\'] && !empty( $_POST[\'action\'] ) &&  $_POST[\'action\'] == "new_post") {
if ( ! function_exists( \'wp_handle_upload\' )) { 
            require_once(ABSPATH . "wp-admin" . \'/includes/image.php\');
            require_once(ABSPATH . "wp-admin" . \'/includes/file.php\');
            require_once(ABSPATH . "wp-admin" . \'/includes/media.php\');
}
$file=$_FILES;
// Do some minor form validation to make sure there is content
if (isset ($_POST[\'title\'])) {
    $title =  $_POST[\'title\'];
} else {
    echo \'Please enter a game  title\';
}
if (isset ($_POST[\'description\'])) {
    $description = $_POST[\'description\'];
} else {
    echo \'Please enter the content\';
}
$tags = $_POST[\'post_tags\'];

// Add the content of the form to $post as an array
$new_post = array(
    \'post_title\'    => $title,
    \'post_content\'  => $description,
    \'post_category\' => array(11),
    \'tags_input\'    => array($tags),
    \'post_status\'   => \'publish\',           // Choose: publish, preview, future, draft, etc.
    \'post_type\' => fod_music  // Use a custom post type if you want to
);
$overrides = array( \'test_form\' => false);
$uploaded_music = wp_handle_upload( $file[\'music_file\'], $overrides );
$uploaded_music_art = wp_handle_upload( $file[\'music_image\'], $overrides ); 
//save the new post and return its ID
$pid = wp_insert_post($new_post);
update_post_meta($pid,\'music_code\',$uploaded_music[\'url\']);
update_post_meta($pid,\'music_art\',$uploaded_music_art[\'url\']);
wp_redirect( get_permalink($pid)); 
exit();

} 
do_action(\'wp_insert_post\', \'wp_insert_post\');
?>

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

与其保存侧载文件的URL,不如保存其ID。然后,您可以将post meta或税务术语附加到新附件中,以指示其相册艺术。

这样,你的meta就会存储当前封面的ID,如果你想选择,只需显示带有相关postmeta的图像的附件,表明它们属于当前帖子。使用父位可能就足够了。

这为您提供了使用图像大小的额外灵活性。我建议你对音乐文件也这样做。

使用media_handle_sideload 要处理文件上载,请从http://core.trac.wordpress.org/browser/tags/3.4.1/wp-admin/includes/media.php:

258 /**
259  * This handles a sideloaded file in the same way as an uploaded file is handled by {@link media_handle_upload()}
260  *
261  * @since 2.6.0
262  *
263  * @param array $file_array Array similar to a {@link $_FILES} upload array
264  * @param int $post_id The post ID the media is associated with
265  * @param string $desc Description of the sideloaded file
266  * @param array $post_data allows you to overwrite some of the attachment
267  * @return int|object The ID of the attachment or a WP_Error on failure
268  */
269 function media_handle_sideload($file_array, $post_id, $desc = null, $post_data = array()) {
这应该会给你一个文件上传的附件,并将其附加到指定的帖子。然后,您可以使用单选显示每个封面的缩略图,并将每个封面图像的附件ID作为值来进行选择。

结束

相关推荐

Help with forms and nonces

我正在尝试创建一个用于(面向公众的)表单的nonce。下面是我的代码:function my_form() { if (isset($_POST[\'submit\'])) { $name = $_POST[\'name\']; $description = $_POST[\'description\']; $output_form = false; if (wp_verify_nonce($_P