使用前端帖子编辑表单更改帖子缩略图

时间:2014-04-07 10:11:29

标签: php wordpress file-upload

如果用户在前端帖子编辑屏幕上选择新文件,我正在尝试更改帖子缩略图。这类似于我用来上传数据的代码,并在前端设置帖子缩略图添加新帖子:

<?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'])) {

        if($_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);
            $thumbnail = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), '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
        update_post_meta($post_id, 'shru_price', esc_attr(strip_tags($_POST['shru_price'])));
        update_post_meta($post_id, 'shru_address', esc_attr(strip_tags($_POST['shru_address'])));
        update_post_meta($post_id, '_thumbnail_id', $attachment_id );

        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);

出于某种原因,在帖子编辑屏幕上,图像文件甚至无法上传。当我使用更新后期元时,它会删除旧的缩略图,所以我猜它正在那里工作,但由于文件没有上传,所以不能用新的替换它。令人困惑的是文件在添加新帖子屏幕而不是编辑帖子屏幕上使用upload_user_file功能上传的原因。

有什么想法吗?

0 个答案:

没有答案