Beitrag senden und Bild vom Frontend hochladen


11

Ich versuche etwas Ähnliches wie die obige Frage zu tun. Ich versuche, Benutzer dazu zu bringen, Bilder vom Front-End zu posten und hochzuladen. Ich habe das Postformular und seine Arbeit bereits erledigt.

Ich bin einfach gefolgt und habe die Antwort von Robin I Knight ausprobiert. Upload-post-thumbnail-from-the-front-end . Leider konnte ich es nicht zum Laufen bringen. Gibt es etwas, das ich ändern oder bearbeiten soll?

Vielen Dank.

Antworten:


22

Wenn Sie über die Antwort sprechen, die ich hier gepostet habe, wird einfach eine Datei in einem Iframe hochgeladen, um "Ajax like" Submit zu erreichen.

Wenn Sie bereits ein Formular haben, das die Post-Übermittlung behandelt, können Sie die Eingabe des Upload-Dateifelds einfach irgendwo in Ihr Formular einfügen:

<form ...
...
<input type="file" name="thumbnail" id="thumbnail">
...
...
</form>

Stellen Sie sicher, dass Ihr Formular ein enctype="multipart/form-data"Attribut hat.

wp_insert_post();Halten Sie dann in Ihrem Formularverarbeitungsskript nach dem Erstellen des Beitrags (vorausgesetzt, Sie verwenden ) die Beitrags-ID in einer neuen Variable fest:

$new_post = wp_insert_post($post_array);

und danach hinzufügen:

            if (!function_exists('wp_generate_attachment_metadata')){
                require_once(ABSPATH . "wp-admin" . '/includes/image.php');
                require_once(ABSPATH . "wp-admin" . '/includes/file.php');
                require_once(ABSPATH . "wp-admin" . '/includes/media.php');
            }
             if ($_FILES) {
                foreach ($_FILES as $file => $array) {
                    if ($_FILES[$file]['error'] !== UPLOAD_ERR_OK) {
                        return "upload error : " . $_FILES[$file]['error'];
                    }
                    $attach_id = media_handle_upload( $file, $new_post );
                }   
            }
            if ($attach_id > 0){
                //and if you want to set that image as Post  then use:
                update_post_meta($new_post,'_thumbnail_id',$attach_id);
            }

und Ihr Bild wird hochgeladen und als Post-Thumbnail gespeichert.


Vielen Dank, dass Sie @Bainternet. Ich hatte Mühe, das Miniaturbild einzufügen, aber aus irgendeinem Grund, als ich '$ new_post' durch '$ pid' ersetzte, wurde das Post-Miniaturbild
eingefügt

lool ich bin so dumm Ich habe gerade erfahren, warum ich '$ pid' verwenden musste. Ich hatte diese Zeile$pid = wp_insert_post($new_post);
Govnah Antwi-Boasiako

Ich bin froh, dass du es geschafft hast, und besser ist, dass du den Punkt verstanden hast.
Bainternet

Ja, vielen Dank für Ihre Hilfe. Jetzt, wo ich es verstehe, ist es Zeit, etwas
Ajax

1
Leider habe ich nur einen Account in Stackoverflow, so dass ich dieser Frage nur eine positive Bewertung geben kann. Perfekte Antwort.
Hemnath Mouli

1

HTML-Markup:

 <p>
   <label for="custom-upload">Upload New Image:</label>
   <input type="file" tabindex="3" name="custom-upload" id="custom-upload" />
 </p>
 <?php
  /*Retrieving the image*/
  $attachment = get_post_meta($postid, 'custom_image');

  if($attachment[0]!='')
  {
   echo wp_get_attachment_link($attachment[0], 'thumbnail', false, false);
  }

 ?>

Bild hochladen:

<?php
global $post; /*Global post object*/
$post_id = $post->ID; /*Geting current post id*/
$upload = $_FILES['upload']; /*Receive the uploaded image from form*/
add_custom_image($post_id, $upload); /*Call image uploader function*/

function add_custom_image($post_id, $upload)
{
 $uploads = wp_upload_dir(); /*Get path of upload dir of wordpress*/

 if (is_writable($uploads['path']))  /*Check if upload dir is writable*/
 {
  if ((!empty($upload['tmp_name'])))  /*Check if uploaded image is not empty*/
  {
   if ($upload['tmp_name'])   /*Check if image has been uploaded in temp directory*/
   {
    $file=handle_image_upload($upload); /*Call our custom function to ACTUALLY upload the image*/

    $attachment = array  /*Create attachment for our post*/
    (
      'post_mime_type' => $file['type'],  /*Type of attachment*/
      'post_parent' => $post_id,  /*Post id*/
    );

    $aid = wp_insert_attachment($attachment, $file['file'], $post_id);  /*Insert post attachment and return the attachment id*/
    $a = wp_generate_attachment_metadata($aid, $file['file'] );  /*Generate metadata for new attacment*/
    $prev_img = get_post_meta($post_id, 'custom_image');  /*Get previously uploaded image*/
    if(is_array($prev_img))
    {
     if($prev_img[0] != '')  /*If image exists*/
     {
      wp_delete_attachment($prev_img[0]);  /*Delete previous image*/
     }
    }
    update_post_meta($post_id, 'custom_image', $aid);  /*Save the attachment id in meta data*/

    if ( !is_wp_error($aid) ) 
    {
     wp_update_attachment_metadata($aid, wp_generate_attachment_metadata($aid, $file['file'] ) );  /*If there is no error, update the metadata of the newly uploaded image*/
    }
   }
  }
  else
  {
   echo 'Please upload the image.';
  }
 }
}

function handle_image_upload($upload)
{
 global $post;

        if (file_is_displayable_image( $upload['tmp_name'] )) /*Check if image*/
        {
            /*handle the uploaded file*/
            $overrides = array('test_form' => false);
            $file=wp_handle_upload($upload, $overrides);
        }
 return $file;
}
?>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.