Impostare l'Immagine in Evidenza dal Form Frontend

13 nov 2012, 11:31:25
Visualizzazioni: 21.1K
Voti: 7

Ho lottato per giorni per risolvere questo problema. Sono riuscito a implementare con successo un form per inviare post dal frontend del mio sito. Ma non riesco a capire come far funzionare il caricamento delle immagini.

Voglio che qualsiasi immagine caricata dall'utente venga automaticamente allegata al post e diventi la sua immagine in evidenza.

Qualcuno può spiegarmi come farlo con il mio codice esistente?

Ho cercato tra tutte le domande pertinenti su questo forum e nessuna delle soluzioni funziona per me.

<?

if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['insert_post'] )) { //verifica che il nostro form sia stato inviato
//Se lo è stato, reindirizza alla dashboard
?><script language="javascript"><!--
location.replace("/dashboard/")
//-->
</script> <?php

$title = $_POST['thread_title']; //imposta il nostro titolo

if ($_POST['thread_description']=="") { // controlla se è stata inserita una descrizione
$description = "Vedi il titolo del thread..."; // se no, usa il segnaposto
} else {
$description = $_POST['thread_description']; //se sì, usala
}

$tags = $_POST['thread_tags']; //carica i tag del thread (tassonomia personalizzata) in un array

$post = array( //i nostri argomenti wp_insert_post
'post_title'    => wp_strip_all_tags($title),
'post_content'  => $description,
'post_category' => array('0' => $_POST['cat']),
'tax_input' => array('thread_tag' => $tags),
'post_status'   => 'publish',
'post_type' => 'tsv_userpost'
);

$my_post_id = wp_insert_post($post); //invia il nostro post, salva l'ID risultante

$current_user = wp_get_current_user(); //controlla chi ha effettuato l'accesso

add_post_meta($my_post_id, '_your_custom_meta', $var); //aggiungi metadati personalizzati, dopo l'inserimento del post


} else {

if(is_user_logged_in()) { // controlla che l'utente sia loggato prima di presentare il form

$current_user = wp_get_current_user();

?>

<div id="postbox">

<form id="new_thread" name="new_thread" method="post" action="" enctype="multipart/form-data">

<input class="required" type="text" id="thread_title" value="" tabindex="1" name="thread_title" placeholder="Titolo Thread" />

<textarea id="thread_description" name="thread_description" cols="80" rows="20" tabindex="2"></textarea>

<div class="left">
<select name='cat' id='cat' class='postform required' tabindex="3">
<option value="" selected="selected">Scegli:</option>
<option class="writing" value="90">Scrittura</option>
<option class="image" value="91">Immagine</option>
<option class="video" value="92">Video</option>
<option class="audio" value="94">Audio</option>
<option class="link" value="95">Link</option>
</select>
</div>

<input type="text" value="" tabindex="4" size="16" name="thread_tags" id="thread_tags" placeholder="Tag" />
<br />

<!-- immagini -->
<label for="images">Immagine in Evidenza:</label>
<input type="file" name="user-image-featured" id="user-image-featured" size="20">
<!-- Pulsante Invia-->
<br />
<input type="submit" value="Salva Post" tabindex="5" id="thread_submit" name="thread_submit" class="thread-button" />

<input type="hidden" name="insert_post" value="post" />

<?php wp_nonce_field( 'new_thread' ); ?>

</form>

</div>

<?php } else { echo 'per favore effettua il login'; } } ?>
0
Tutte le risposte alla domanda 6
3

puoi farlo eseguendo la funzione

set_post_thumbnail( $my_post_id, $thumbnail_id );

ricorda, devi prima elaborare e inserire l'immagine nella libreria:

$uploaddir = wp_upload_dir();
$file = $_FILES[ ... qualunque dato tu abbia nel tuo POST ... ];
$uploadfile = $uploaddir['path'] . '/' . basename( $file );

move_uploaded_file( $file , $uploadfile );
$filename = basename( $uploadfile );

$wp_filetype = wp_check_filetype(basename($filename), null );

$attachment = array(
    'post_mime_type' => $wp_filetype['type'],
    'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
    'post_content' => '',
    'post_status' => 'inherit',
    'menu_order' => $_i + 1000
);
$attach_id = wp_insert_attachment( $attachment, $uploadfile );

non ho testato lo script - è adattato da una versione che ho creato. potresti voler modificare il nome del file e cose simili, ma nel complesso funziona così :)

13 nov 2012 12:14:00
Commenti

Grazie! Ho provato con funzioni simili a quella senza successo. Sto inserendo il codice nel posto sbagliato? Dove dovrebbero andare quei due snippet di codice nel codice sopra?

Eckstein Eckstein
13 nov 2012 19:44:53

questo non ha molta importanza. puoi creare il post prima dell'allegato o viceversa, l'unica cosa importante è avere entrambi creati quando chiami set_post_thumbnail( $my_post_id, $thumbnail_id );

fischi fischi
14 nov 2012 12:32:17

a proposito, la tua immagine viene inviata correttamente? prova print_r( $_FILES ) per vedere se hai la configurazione corretta e l'immagine disponibile.

fischi fischi
14 nov 2012 12:33:04
0

Funziona correttamente!

$uploaddir = wp_upload_dir();
$file = $_FILES["post_Fimage"]["name"];
$uploadfile = $uploaddir['path'] . '/' . basename( $file );

move_uploaded_file( $_FILES["post_Fimage"]["tmp_name"] , $uploadfile );
$filename = basename( $uploadfile );

$wp_filetype = wp_check_filetype(basename($filename), null );

$attachment = array(
    'post_mime_type' => $wp_filetype['type'],
    'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
    'post_content' => '',
    'post_status' => 'inherit',
    'menu_order' => $_i + 1000
);
$attach_id = wp_insert_attachment( $attachment, $uploadfile );
    //echo "<pre>";print_r($wp_filetype);echo "</pre>";
    //echo "<pre>";print_r($_FILES);echo "</pre>";
set_post_thumbnail( $post_id, $attach_id ); 
23 feb 2018 09:29:48
1

/******* Questo funziona per me! ********/

$uploaddir = wp_upload_dir();
$file = $_FILES["post_Fimage"]["name"];
$uploadfile = $uploaddir['path'] . '/' . basename( $file );

move_uploaded_file( $_FILES["post_Fimage"]["tmp_name"] , $uploadfile );
$filename = basename( $uploadfile );

$wp_filetype = wp_check_filetype(basename($filename), null );

$attachment = array(
    'post_mime_type' => $wp_filetype['type'],
    'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
    'post_content' => '',
    'post_status' => 'inherit',
    'menu_order' => $_i + 1000
);
$attach_id = wp_insert_attachment( $attachment, $uploadfile );
set_post_thumbnail( $post_id, $attach_id ); 
23 feb 2018 09:20:49
Commenti

Per favore, aggiungi più dettagli alla tua risposta.

Christine Cooper Christine Cooper
23 feb 2018 13:07:34
2

Posso sistemare il tuo codice?

$uploaddir = wp_upload_dir();
$file = $_FILES[ ... qualunque cosa tu abbia nei tuoi dati POST ... ];
$uploadfile = $uploaddir['path'] . '/' . basename( $file['name'] );

move_uploaded_file( $file['tmp_name'] , $uploadfile );
$filename = basename( $uploadfile );

$wp_filetype = wp_check_filetype(basename($filename), null );

$attachment = array(
    'post_mime_type' => $wp_filetype['type'],
    'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
    'post_content' => '',
    'post_status' => 'inherit',
    'menu_order' => $_i + 1000
);
$attach_id = wp_insert_attachment( $attachment, $uploadfile );
10 set 2014 00:13:32
Commenti

Aggiungi una spiegazione alla tua risposta: perché questa soluzione potrebbe risolvere il problema?

fuxia fuxia
10 set 2014 01:58:55

scusa, la variabile $_FILES contiene campi come ["name"] e ["tmp_name"] che devono essere utilizzati altrimenti il caricamento del file non funzionerà

biancardi biancardi
10 set 2014 08:58:04
0

Potresti voler provare a spuntare prima la casella del recapcha se stai utilizzando recapcha. Il recapcha impedirà qualsiasi invio di post o get.

17 mar 2020 10:56:22
0

Ho lo stesso problema. L'immagine in evidenza non viene importata correttamente nel post che viene inviato tramite front-end. Posso vedere l'immagine nella libreria media, quindi so che funziona fino a quel punto.

Questa funzione funziona fino a '//function works till here'. Qualcuno può aiutarmi?

function save_post ( $form ){   

    $errors = array();
    
    $form_setting = $form->get_settings();
    $form_fields  = $form->get_fields();
    $form_fields_files = $form->get_uploaded_files();
    $form_id = $form_fields['formId'];
    
    if ($form_id === 'fxuqcf') {
        $post_title = isset($form_fields['post-titel']) ? $form_fields['post-titel'] : '';
        $post_content = isset($form_fields['post-bericht']) ? $form_fields['post-bericht'] : '';
        $post_category_name = isset($form_fields['post-categorie']) ? $form_fields['post-categorie'] : '';}
    
    //recupera il nome della categoria
    $post_category_id = get_category_by_slug($post_category_name)->term_id;
    if (!$post_category_id) {
        $errors[] = 'nome della categoria non valido';
        return $errors;}
        
    //crea l'array del post
    $new_post = array(
    'post_type' => 'post',
    'post_title' => $post_title,
    'post_content' => $post_content,
    'post_status' => 'publish',
    'post_category' => array($post_category_id),);

    //inserisce il post
    $post_id = wp_insert_post($new_post);
    
    //verifica se il post è stato creato correttamente
    if ($post_id && is_wp_error($post_id)){

//la funzione funziona fino a qui

        if (!empty($form_fields_files['post-afbeelding'])){
            $uploaded_files = $form_fields_files['post-afbeelding'];
            
            $file = $uploaded_files[0];
            
            $file_array = array(
            'name' => basename($file['file']),
            'tmp-name' => $file['file']);
            
            if (file_exist($file['file'])){
                require_once(ABSPATH . 'wp-admin/includes/media.php');
                require_once(ABSPATH . 'wp-admin/includes/file.php');
                require_once(ABSPATH . 'wp-admin/includes/image.php');
                
                
            $attachment_id = media_handle_sideload($file_array, $post_id);
                
            if (is_wp_error($attachment_id)){
            $errors[] = 'Si è verificato un errore con l\'immagine:' . $attachment_id->get_error_message();
            }else {
                $attachment_id = wp_insert_attachment();
            set_post_thumbnail($post_id, $attachment_id);
                }
                    }else {
            $errors[] = 'Il file caricato non esiste.' ;
                }
            }
        }
    }   
5 dic 2024 12:09:23