wake-up-neo.net

Wie lade ich ein Bild vom Frontend hoch und speichere es in einer Medienbibliothek?

Ich arbeite an einem Plugin. Ich möchte ein Bild vom Front-End hochladen, d. H. Mit input type="file". Ich habe viel google gemacht, konnte aber kein Bild hochladen. Hier ist mein Code zum Hochladen eines Bildes

<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

Ich google diesen Fehler und führe alle möglichen Lösungen aus, die ich gefunden habe, konnte ihn aber nicht beheben. Sagen Sie mir, wie ich ein Bild hochladen und speichern soll, wenn es neben diesem Code noch eine andere Lösung gibt.

2
raxa

Jetzt habe ich eine Antwort auf meine eigene Frage. Ich habe dieses Problem mithilfe dieses Codes gelöst. Ich füge diesen Code nur zum Teilen und Helfen anderer hinzu, da es für mich funktioniert.

<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 zum Hochladen und Speichern des Bildes:

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

Bildcode anzeigen

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

Sie rufen eine WordPress-Funktion auf, bevor WordPress vollständig geladen ist. Eine schnelle und schmutzige Möglichkeit, dies zu beheben, ist das Hinzufügen

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

am oberen Rand Ihrer Plugin-Datei, damit es die benötigten Funktionen hat.

Eine bessere und richtige Möglichkeit, dies zu lösen, besteht darin, mit Ihrem Code zu warten, bis WordPress mit einem der verfügbaren Hooks abgeschlossen ist

add_action( 'init', 'wpse_228301' );

oder

add_action( 'wp_loaded', 'wpse_228301' );