web-dev-qa-db-fra.com

Comment télécharger une image depuis le front-end et l'enregistrer dans une médiathèque?

Je travaille sur un plugin .Je veux télécharger une image de front-end i.e par input type="file". J'ai beaucoup google pour cela, mais je n'ai pas pu télécharger l'image. Voici mon code de téléchargement d'image

<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 ) ) {
        // There was an error uploading the image.
    } else {
        // The image was uploaded successfully!
    }

} else {

    // The security check failed, maybe show the user an error.
}
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;
        // Invalid nonce
        return false;
    }
After implementing this code  I get thiserror 
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

Je recherche cette erreur sur Google et lance toutes les solutions possibles trouvées sans pouvoir la résoudre. Dites-moi comment télécharger une image et la sauvegarder, s’il existe une autre solution à côté de mon code.

2
raxa

Maintenant, j'ai une réponse à ma propre question.J'ai résolu ce problème en utilisant ce code.J'ajoute ce code uniquement pour le partage et l'aide aux autres, car cela fonctionne pour moi.

<input type="file" name="my_file_upload" id="my_file_upload_id" class="bg_checkbox"  >

function register_team_show_case_setting() {
//register our settings
    register_setting('my_team_show_case_setting', 'my_file_upload');
}
add_action('admin_init', 'register_team_show_case_setting');

Code pour télécharger et enregistrer l'image:

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

Afficher le code de l'image

echo wp_get_attachment_url(get_option('option_image'));
3
raxa

Vous appelez pour une fonction WordPress avant que WordPress soit complètement chargé. Un moyen rapide et sale de résoudre ce problème est d'ajouter

require_once(ABSPATH .'wp-includes/pluggable.php');

en haut de votre fichier plugin afin qu'il ait les fonctions nécessaires.

Une façon meilleure et correcte de résoudre ce problème consiste à attendre avec votre code que WordPress soit terminé en utilisant l'un des points d'ancrage disponibles.

add_action( 'init', 'wpse_228301' );

ou

add_action( 'wp_loaded', 'wpse_228301' );
0