如果用户在前端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
功能在添加新帖子屏幕上,但不在编辑帖子屏幕上。有什么想法吗?