Come caricare un'immagine dal front-end e salvarla nella libreria media?
Sto lavorando su un plugin. Voglio caricare un'immagine dal front-end tramite input type="file"
. Ho fatto molte ricerche su Google ma non sono riuscito a caricare l'immagine. Ecco il mio codice per il caricamento dell'immagine:
<form method="post" action="options.php">
<input type="file" name="my_image_upload" id="my_image_upload" multiple="false" />
<input type="hidden" name="post_id" id="post_id" value="55" />
<?php wp_nonce_field( 'my_image_upload', 'my_image_upload_nonce' ); ?>
<input id="submit_my_image_upload" name="submit_my_image_upload" type="submit" value="Upload" />
</form>
<?php
if (
isset( $_POST['my_image_upload_nonce'], $_POST['post_id'] )
&& wp_verify_nonce( $_POST['my_image_upload_nonce'], 'my_image_upload' )
&& current_user_can( 'edit_post', $_POST['post_id'] )
) {
require_once( ABSPATH . 'wp-admin/includes/image.php' );
require_once( ABSPATH . 'wp-admin/includes/file.php' );
require_once( ABSPATH . 'wp-admin/includes/media.php' );
$attachment_id = media_handle_upload( 'my_image_upload', $_POST['post_id'] );
if ( is_wp_error( $attachment_id ) ) {
// Si è verificato un errore durante il caricamento dell'immagine.
} else {
// L'immagine è stata caricata con successo!
}
} else {
// Il controllo di sicurezza è fallito, mostra un errore all'utente.
}
function wp_verify_nonce_X($nonce, $action = -1) {
return true;
$user = wp_get_current_user();
$uid = (int) $user->id;
$i = wp_nonce_tick();
if ( substr(wp_hash($i . $action . $uid, 'nonce'), -12, 10) == $nonce )
return 1;
if ( substr(wp_hash(($i - 1) . $action . $uid, 'nonce'), -12, 10) == $nonce )
return 2;
// Nonce non valido
return false;
}
// Dopo l'implementazione di questo codice ottengo questo errore
Fatal error: Call to undefined function wp_verify_nonce() in /home/projectdemos/public_html/WP-Team-Showcase/wp-content/plugins/wp-team-showcase/team.php on line 435
Ho cercato su Google questo errore e ho provato tutte le possibili soluzioni trovate ma non sono riuscito a risolverlo. Ditemi come caricare l'immagine e salvarla, se c'è un'altra soluzione oltre a questo codice.

Ora ho una risposta alla mia domanda. Ho risolto questo problema utilizzando questo codice. Lo aggiungo solo per condividerlo e aiutare altri, dato che ha funzionato per me.
<input type="file" name="my_file_upload" id="my_file_upload_id" class="bg_checkbox" >
function register_team_show_case_setting() {
//registriamo le nostre impostazioni
register_setting('my_team_show_case_setting', 'my_file_upload');
}
add_action('admin_init', 'register_team_show_case_setting');
Codice per caricare e salvare l'immagine:
require_once( ABSPATH . 'wp-admin/includes/image.php' );
require_once( ABSPATH . 'wp-admin/includes/file.php' );
require_once( ABSPATH . 'wp-admin/includes/media.php' );
$attach_id = media_handle_upload('my_file_upload', $post_id);
if (is_numeric($attach_id)) {
update_option('option_image', $attach_id);
update_post_meta($post_id, '_my_file_upload', $attach_id);
}
Codice per visualizzare l'immagine
echo wp_get_attachment_url(get_option('option_image'));

Stai chiamando una funzione di WordPress prima che WordPress sia completamente caricato. Un modo rapido ma poco elegante per risolvere questo problema è aggiungere
require_once(ABSPATH .'wp-includes/pluggable.php');
all'inizio del tuo file di plugin in modo che abbia le funzioni necessarie.
Un modo migliore e corretto per risolvere questo problema è attendere che WordPress abbia terminato il caricamento utilizzando uno degli hook disponibili
add_action( 'init', 'wpse_228301' );
oppure
add_action( 'wp_loaded', 'wpse_228301' );

dopo aver utilizzato require_once(ABSPATH .'wp-includes/pluggable.php');
in cima l'errore è stato rimosso ma nessuna immagine viene caricata nella libreria multimediale

Ti esorto a sviluppare il plugin come dovrebbe essere, quindi utilizza gli hook di azione init o wp_loaded per inizializzare il plugin. In questo modo tutte le funzioni di WordPress saranno disponibili per te. Il modo in cui lo stai gestendo ora con il caricamento dei file funziona nella maggior parte dei casi, ma non è assolutamente il modo corretto di procedere. Inoltre, il mio obiettivo era eliminare il tuo messaggio di errore, non ho controllato tutto il tuo codice, quindi se l'errore che avevi è scomparso, qualche altra parte del tuo codice non funziona correttamente.

Ho caricato un'immagine utilizzando questo codice <input type="file" name="my_file_upload" id="my_file_upload"><?php
require_once( ABSPATH . 'wp-admin/includes/image.php' );
require_once( ABSPATH . 'wp-admin/includes/file.php' );
require_once( ABSPATH . 'wp-admin/includes/media.php' );
$attach_id = media_handle_upload( 'my_file_upload', $post_id );
if ( is_numeric( $attach_id ) ) {
update_post_meta( $post_id, '_my_file_upload', $attach_id );
}
?>
nel mio file team.php
. Ora voglio visualizzarla nel file post-type.php
. Puoi dirmi come visualizzarla?

Dovresti creare un nuovo post per questo per evitare di ingombrare, dato che questo problema è risolto, ma lo salvi come post meta "_my_file_upload" così puoi recuperarlo sul front-end recuperando quel post meta:
$attachment = get_post_meta( get_the_ID(), '_my_file_upload' );

$attachment = get_post_meta( get_the_ID(), '_my_file_upload' );
mi restituisce un array vuoto

Questo non funzionerà nei commenti. Per favore, apri un nuovo argomento per questo :)

Ho incollato il mio codice qui, per favore controllalo http://pastebin.com/mXNC2UMJ

Ancora una volta, per favore crea un nuovo argomento con informazioni sufficienti in modo che io e altre persone possiamo avere un post adeguato su cui lavorare.

Continuiamo questa discussione nella chat.
