Cum să încarci imagini din frontend și să le salvezi în biblioteca media?

31 mai 2016, 11:11:26
Vizualizări: 22.3K
Voturi: 2

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.

0
Toate răspunsurile la întrebare 2
1

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'));
6 iun. 2016 11:14:34
Comentarii

Bună ziua. Cum pot încărca mai multe imagini folosind exemplul tău?

wpdev wpdev
12 apr. 2018 17:32:56
9

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' );
31 mai 2016 15:11:02
Comentarii

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

raxa raxa
31 mai 2016 18:41:14

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.

Jebble Jebble
1 iun. 2016 10:35:32

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?

raxa raxa
1 iun. 2016 11:41:41

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

Jebble Jebble
1 iun. 2016 12:26:32

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

raxa raxa
1 iun. 2016 12:59:55

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

Jebble Jebble
1 iun. 2016 13:09:46

Am lipesc codul meu aici, te rog verifică-l http://pastebin.com/mXNC2UMJ

raxa raxa
1 iun. 2016 13:40:14

Î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.

Jebble Jebble
1 iun. 2016 14:03:10

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

raxa raxa
2 iun. 2016 10:45:04
Arată celelalte 4 comentarii