Un utente ha chiesto informazioni su Developing with WordPress di Wordpress

Invio del caricamento del file del plugin personalizzato

Un utente ha chiesto ūüĎá

Ok, quindi ho sviluppato un plugin per WordPress e una delle funzionalit√† che volevo aggiungere era un’area dell’amministrazione in cui l’utente pu√≤ caricare un CSV e dove il modulo viene inviato per eseguire un grande script ole, I Wrote.

Quindi ho creato la forma di amministrazione così:

(Situato nel file “PLUGIN_FOLDER / admin / partials / admin-bookings-import-display.php)

<div id="poststuff">
        <div id="post-body" class="metabox-holder">
            <div id="post-body-content">
                Please upload your XML file here
                <form action="<?php echo admin_url('admin-post.php'); ?>" enctype="multipart/form-data" method="post">
                    <p>Choose a file: <input type="file" name="xml-file" id="xml-file" /></p>
                    <?php submit_button('Upload') ?>
                </form>
            </div>
        </div>
        <br class="clear">
    </div>

Il mio problema ora è: come faccio a scoprire come posso eseguire il mio materiale di script quando invio questo modulo?

Tutto il mio codice script può essere trovato in un file qui: PLUGIN_FOLDER / admin / bookings-import.php

Ma come posso chiamare la mia presentazione del modulo direttamente a questo file senza riferimento diretto al file?

Un altro punto, poiché sto utilizzando un caricatore di file, devo salvare fisicamente questo file prima di poter fare qualsiasi cosa con il suo contenuto? Ho trovato lo script funzionante mentre utilizzavo un file fisico salvato sulla mia macchina ma ovviamente devo farlo funzionare utilizzando quello caricato nel form.

E prima che qualcuno consigli di utilizzare un normale plug-in per il caricamento di file, il mio script in basso deve manipolare i dati con il contenuto del CSV prima di inserirlo nel mio SS. Questo è già impostato correttamente.

Grazie

(@Gioiosamente)

2 anni fa

Se lasci l’attributo azione del modulo, punter√† alla stessa pagina in cui si trova.
√ą necessario aggiungere un nonce al modulo e denominare i campi del modulo con il prefisso del plug-in, in modo da sapere che sono tuoi. E controlla per vedere se ci sono risultati per informare l’utente da un precedente invio.

Quindi il tuo plug-in necessita di una funzione per controllare ed elaborare i campi del modulo, se
* file contiene
* il nonce è verificato
* l’utente ha le capacit√† giuste (probabilmente upload_files)

(@bcworkz)

2 anni fa

Admin-post.php √® un modo valido per gestire le richieste secondarie dei moduli, ma √® necessario utilizzarlo correttamente. Il tuo modulo deve avere un campo nascosto chiamato “azione” con un valore assegnato. Quel valore √® usato per costruire un action hook che accende admin-post.php con do_action (). Il nome del gancio √® preso come "admin_post_{$action}" dove $ action √® il valore di passaggio. (supponendo che sia richiesto il login)

Quindi il tuo plugin deve collegare questa azione al codice di gestione del modulo. Devi ancora fare le cose menzionate da Joy, tranne lasciare l’attributo di azione nel tag del modulo.

Penso che in questo caso utilizzerei personalmente l’approccio di Joy, ma admin – post.php pu√≤ essere molto utile. Vale la pena imparare a usarlo correttamente.

Indipendentemente da come esegui il codice di gestione del modulo, il file caricato finisce in una cartella temporanea PHP. Puoi manipolarlo proprio l√¨ se vuoi. Alla fine verr√† cancellato, ma √® buona norma rimuoverlo non appena non √® pi√Ļ necessario, ovvero √® stato copiato altrove o elaborato ei suoi dati sono stati salvati.

Il tuo gestore di file deve caricare il maggior numero di controlli possibile per verificare che stai ricevendo il file che ti aspetti. Controlla la fonte per _wp_handle_upload () per le cose che WP controlla nei caricamenti di file. Assicurati di convalidare e disinfettare tutti i valori estratti dal file che salvi nel tuo DB. Gestire i caricamenti di file può essere molto rischioso se non vengono prese le dovute precauzioni.

Lanciatore di thread

(@klivie)

2 anni fa

Grazie mille @bcworkz e @ con gioia,

Ho seguito il percorso per utilizzare admin-post.php per gestire il modulo inviato. Ho creato un campo nascosto nel mio modulo con “action” di “import_booking_file”.

Poi ho aggiunto il nome del mio hook in questo modo: add_action (‘admin_post_import_booking_file’, ‘function_to_fire’);

Il problema al momento √® che quando invio il mio modulo va semplicemente all’URL “wp-admin / admin-post.php” e mi mostra una pagina vuota senza alcuna risposta. Perch√© non definire la mia azione?

Ho aggiunto una manciata di logica per controllare il mio file caricato, ma ovviamente l’azione non sembra andare cos√¨ lontano.

(@bcworkz)

2 anni fa

La funzione di richiamo dovrebbe generare tutto il contenuto della risposta HTML. WP invia le intestazioni correlate prima dell’output per le chiamate di ritorno. Dovresti usare le normali tecniche di debug PHP all’interno del tuo callback per scoprire cosa c’√® che non va. Innanzitutto, inserisci questo come prima riga nella dichiarazione “function_to_fire ()”:
wp_die('Action admin_post_import_booking_file has fired.');

Pubblica un file tramite il modulo. Se ricevi una finestra di messaggio morta, la parte del post di amministrazione funziona correttamente. In caso contrario, pubblica qui il codice del modulo corrente e lo esamineremo di nuovo.

Supponendo che tu abbia trovato il die box, rimuovi quel codice e procedi con un ulteriore debug, ad esempio assicurandoti che il file sia atterrato nella cartella temporanea di PHP e verificando che tutte le variabili abbiano i loro valori attesi.

Was this helpful?

0 / 0

Lascia un commento 0

Your email address will not be published. Required fields are marked *