我有一个前端的帖子表单,在那里我上传了一张图片。该图像存储为自定义字段,这很容易做到。但我需要做的是将每个用户的每个唯一图像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\');
?>
最合适的回答,由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作为值来进行选择。