如果用户在前端post编辑屏幕上选择新文件,我将尝试更改post缩略图。这类似于我用来上传数据并在前端添加新帖子表单上设置帖子缩略图的代码:
<?php
$query = new WP_Query( array( \'post_type\' => \'properties\', \'posts_per_page\' => \'-1\' ) );
if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post();
if( isset($_GET[\'post\']) && $_GET[\'post\'] == $post->ID) {
$current_post = $post->ID;
$content = get_the_content();
$price = get_post_meta($post->ID, \'shru_price\', true);
$address = get_post_meta($post->ID, \'shru_address\', true);
$thumbid = get_post_thumbnail_id( $post->ID );
$thumbnail = wp_get_attachment_image_src( $thumbid, \'single-image\' );
}
endwhile; endif;
wp_reset_query();
global $current_post;
$postContentError = \'\';
if (
isset( $_POST[\'submitted\'] )
&& isset( $_POST[\'post_nonce_field\'] )
&& wp_verify_nonce( $_POST[\'post_nonce_field\'], \'post_nonce\' )
) {
if ( trim( $_POST[\'postContent\'] ) === \'\' ) {
$postContentError = \'Please enter a description of this property.\';
$hasError = true;
}
$post_information = array(
\'ID\' => $current_post,
\'post_content\' => $_POST[\'postContent\'],
\'post_type\' => \'properties\',
\'post_status\' => \'publish\'
);
$post_id = wp_update_post( $post_information );
function upload_user_file( $file = array() ) {
global $post_id;
require_once( ABSPATH . \'wp-admin/includes/admin.php\' );
$file_return = wp_handle_upload( $file, array(\'test_form\' => false ) );
if( isset($file_return[\'error\']) || isset($file_return[\'upload_error_handler\']) ) {
return false;
} else {
$filename = $file_return[\'file\'];
$attachment = array(
\'post_mime_type\' => $file_return[\'type\'],
\'post_title\' => preg_replace( \'/\\.[^.]+$/\', \'\', basename( $filename ) ),
\'post_content\' => \'\',
\'post_status\' => \'inherit\',
\'guid\' => $file_return[\'url\']
);
$attachment_id = wp_insert_attachment($attachment, $file_return[\'url\'], $post_id );
require_once(ABSPATH . \'wp-admin/includes/image.php\');
$attachment_data = wp_generate_attachment_metadata( $attachment_id, $filename );
wp_update_attachment_metadata( $attachment_id, $attachment_data );
if( 0 < intval( $attachment_id ) ) {
return $attachment_id;
}
}
return false;
}
if( ! empty( $_FILES ) ) {
foreach( $_FILES as $file ) {
if( is_array( $file ) ) {
$attachment_id = upload_user_file( $file );
}
}
}
$propertyfor = $_POST[\'propertyfor\'];
$propertytype = $_POST[\'propertytype\'];
$bedrooms = $_POST[\'bedrooms\'];
if( $post_id ) {
// Update Custom Meta
$price = esc_attr( strip_tags( $_POST[\'shru_price\'] ) );
update_post_meta( $post_id, \'shru_price\', $price);
$address = esc_attr( strip_tags( $_POST[\'shru_address\'] ) );
update_post_meta( $post_id, \'shru_address\', $address );
update_post_meta ($post_id, \'_thumbnail_id\', $attachment_id );
// Update taxonomies
wp_set_object_terms( $post_id, $propertyfor, \'propertyfor\' );
wp_set_object_terms( $post_id, $propertytype, \'propertytype\' );
wp_set_object_terms( $post_id, $bedrooms, \'bedrooms\' );
// Redirect
wp_redirect(home_url(\'/listings\'));
exit;
}
}
?>
唯一的区别是,在我尝试使用的上述代码中:
update_post_meta( $post_id, \'_thumbnail_id\', $attachment_id );
而不是:
set_post_thumbnail( $post_id, $attachment_id );
由于某些原因,在后期编辑屏幕上,图像文件甚至不会上载。当我使用update post meta时,它会删除旧的缩略图,所以我猜它在那里完成了它的工作,但由于文件没有上载,因此无法用新的缩略图替换它。令人困惑的是,为什么文件使用
upload_user_file
功能在添加新帖子屏幕上,但不在编辑帖子屏幕上。
有什么想法吗?
最合适的回答,由SO网友:Dharmang 整理而成
使用WordPress内置功能更容易media_handle_upload
http://codex.wordpress.org/Function_Reference/media_handle_upload
// These files need to be included as dependencies when on the front end.
require_once( ABSPATH . \'wp-admin/includes/image.php\' );
require_once( ABSPATH . \'wp-admin/includes/file.php\' );
require_once( ABSPATH . \'wp-admin/includes/media.php\' );
// Let WordPress handle the upload.
// Remember, \'my_image_upload\' is the name of our file input in our form above.
$attachment_id = media_handle_upload( \'my_image_upload\', $_POST[\'post_id\'] );
if ( is_wp_error( $attachment_id ) ) {
// There was an error uploading the image.
} else {
// The image was uploaded successfully!
}
您需要指定文件控件名称,然后可以调用
set_post_thumbnail
函数或设置post meta“\\u thumbnail\\u id”
set_post_thumbnail( $post_id, $attachment_id );
EDIT:
由于某些原因,在后期编辑屏幕上,图像文件甚至不会上载。
能否再次检查是否已将enctype=“多部分/表单数据”属性正确设置为表单标记?