Cum să încarci imagini din frontend și să le salvezi în biblioteca media?
Lucrez la un plugin și vreau să încarc imagini din frontend folosind input type="file"
. Am căutat mult pe Google dar nu am reușit să încarc imaginea. Iată codul meu pentru încărcarea imaginii:
<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 ) ) {
// A apărut o eroare la încărcarea imaginii.
} else {
// Imaginea a fost încărcată cu succes!
}
} else {
// Verificarea de securitate a eșuat, poate afișăm utilizatorului o eroare.
}
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 invalid
return false;
}
După implementarea acestui cod primesc această eroare:
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
Am căutat această eroare pe Google și am încercat toate soluțiile posibile găsite, dar nu am reușit să o rezolv. Spuneți-mi cum să încarc imaginea și să o salvez, dacă există vreo altă soluție pe lângă acest cod.

Acum am un răspuns pentru propria mea întrebare. Am rezolvat această problemă folosind acest cod. Adaug acest cod doar pentru a-l împărtăși și a ajuta pe alții, deoarece funcționează pentru mine.
<input type="file" name="my_file_upload" id="my_file_upload_id" class="bg_checkbox" >
function register_team_show_case_setting() {
//înregistrăm setările noastre
register_setting('my_team_show_case_setting', 'my_file_upload');
}
add_action('admin_init', 'register_team_show_case_setting');
Cod pentru încărcarea și salvarea imaginii:
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);
}
Cod pentru afișarea imaginii
echo wp_get_attachment_url(get_option('option_image'));

Apelezi o funcție WordPress înainte ca WordPress să fie încărcat complet. O metodă rapidă și improvizată de a rezolva această problemă este să adaugi
require_once(ABSPATH .'wp-includes/pluggable.php');
la începutul fișierului plugin-ului tău, astfel încât să aibă funcțiile necesare.
O metodă mai bună și corectă de a rezolva această problemă este să aștepți până când WordPress este gata, folosind unul dintre hook-urile disponibile
add_action( 'init', 'wpse_228301' );
sau
add_action( 'wp_loaded', 'wpse_228301' );

după ce am folosit require_once(ABSPATH .'wp-includes/pluggable.php');
în partea de sus, eroarea a dispărut, dar nicio imagine nu se încarcă în biblioteca media

Te îndemn să dezvolți plugin-ul așa cum ar trebui, deci folosește hook-urile de acțiune init sau wp_loaded pentru a inițializa plugin-ul. În acest fel, toate funcțiile WordPress vor fi disponibile pentru tine. Modul în care abordezi acum prin includerea fișierelor funcționează în majoritatea cazurilor, dar cu siguranță nu este modul corect de a face acest lucru. De asemenea, scopul meu a fost să elimin mesajul de eroare, nu am verificat întregul cod, așa că dacă eroarea a dispărut, o altă parte din codul tău nu funcționează corect.

Am încărcat o imagine folosind acest cod <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 );
}
?>
În fișierul meu team.php
. Acum vreau să o afișez în fișierul post-type.php
. Poți să-mi spui cum să o afișez?

Ar trebui să faci o postare nouă pentru asta pentru a evita aglomerarea, deoarece această problemă este rezolvată, dar o salvezi ca meta-informație a postării "_my_file_upload", astfel încât să poți recupera fișierul pe front-end prin preluarea acelei meta-informații:
$attachment = get_post_meta( get_the_ID(), '_my_file_upload' );

$attachment = get_post_meta( get_the_ID(), '_my_file_upload' );
îmi returnează un array gol

Această metodă nu va funcționa în comentarii. Te rog să deschizi un subiect nou pentru asta :)

Încă o dată, te rog să creezi un subiect nou cu informații suficiente, astfel încât eu și alți utilizatori să avem un post adecvat cu care să putem lucra.

Să continuăm această discuție în chat.
