In deze zelfstudie leert u hoe u een plug-in maakt waarmee gebruikers formuliergegevens kunnen verzenden. Je leert ook over beveiliging door nonces te gebruiken.
Shortcodes worden vaak gebruikt om eenvoudige gegevens weer te geven, maar omdat ze eigenlijk een manier zijn om een vertakking van een pagina of post te maken en code uit te voeren, kunnen ze worden gebruikt voor vrij complexe taken, zoals het weergeven en verwerken van formulieren.
We bouwen een plug-in waarmee ingelogde gebruikers het volgende kunnen doen:
Dit is waar we naar streven:
Alle code is beschikbaar in de pluginbron bovenaan deze zelfstudie.
De map WordPress-plug-in bevindt zich in uw WordPress installatiemap op wp-content / plugins
. Maak een map in de map met plug-ins. Laten we het noemen submit-user-citaten
. Maak nu zelf het plugin-bestand aan. Laten we het noemen submit_user_quotes.php
. Het pad naar uw plugin-bestand zou nu moeten zijn: wp-content / plugins / submit-user-quotes / submit_user_quotes.php
Elke Wordpress-plugin heeft wat header-informatie nodig, zodat WordPress het kan identificeren en op de plug-in van het dashboard beschikbaar kan maken.
U kunt deze informatie bewerken volgens uw eigen vereisten.
De plug-in wordt als volgt weergegeven:
Stap 2 Plugin initialisatie functie
We gaan een aangepast berichttype maken met de naam Quotes om onze offertes te houden en een aangepaste taxonomie met de naam quote_category. Dit zal een schoner beheer van de offertes mogelijk maken dan ze eenvoudig toe te wijzen aan normale berichten en categorieën.
De beginhaak en -functie
We zullen de volgende initialisatiecode gebruiken om ons aangepaste berichttype en aangepaste taxonomie te maken:
add_action ('init', 'suq_plugin_init'); function suq_plugin_init () $ quote_type_labels = array ('name' => _x ('Quotes', 'post type general name'), 'singular_name' => _x ('Quote', 'post type singular name'), 'add_new '=> _x (' Nieuwe offerte toevoegen ',' quote '),' add_new_item '=> __ (' Nieuwe offerte toevoegen '),' edit_item '=> __ (' Offerte bewerken '),' new_item '=> __ ( 'Nieuw citaat toevoegen'), 'all_items' => __ ('Citaten bekijken'), 'view_item' => __ ('Bekijk citaat'), 'search_items' => __ ('Zoekcitaten'), 'not_found' = > __ ('Geen citaten gevonden'), 'not_found_in_trash' => __ ('Geen citaten gevonden in Prullenbak'), 'parent_item_colon' => ", 'menu_name' => 'Quotes'); $ quote_type_args = array ('labels '=> $ quote_type_labels,' public '=> true,' query_var '=> true,' rewrite '=> true,' capability_type '=>' post ',' has_archive '=> true,' hierarchical '=> false, 'menu_position' => null, 'ondersteunt' => array ('title', 'editor', 'author')); register_post_type ('quotes', $ quote_type_args); $ quote_category_labels = array ('name' => _x ( 'Quote Categories', 'taxonomy general name'), 'singular_name' => _x ( 'Quote', 'taxonomy singular name'), 'search_items' => __ ('Search Quote Categories'), 'all_items' => __ ('All Quote Categories'), 'parent_item' => __ ('Parent Quote Categorie '),' parent_item_colon '=> __ (' Parent Quote Category: '),' edit_item '=> __ (' Edit Quote Category '),' update_item '=> __ (' Update Quote Category '),' add_new_item '= > __ ('Nieuwe citaatcategorie toevoegen'), 'nieuwe_itemnaam' => __ ('Nieuwe citaatnaam'), 'menu_name' => __ ('Offerte-categorieën'),); $ quote_category_args = array ('hierarchical' => true, 'labels' => $ quote_category_labels, 'show_ui' => true, 'query_var' => true, 'rewrite' => array ('slug' => 'quote_category') ,); register_taxonomy ('quote_category', array ('quotes'), $ quote_category_args); $ default_quote_cats = array ('humor', 'politiek', 'sport', 'filosofie'); foreach ($ default_quote_cats als $ cat) if (! term_exists ($ cat, 'quote_category')) wp_insert_term ($ cat, 'quote_category');Wat deze code doet:
We hebben nu een Quotes-menu in ons beheerdersdashboard en een manier om offertes en hun categorieën te beheren.
Vervolgens definiëren we een shortcode waarmee we het aanmeldingsformulier voor gebruikersopgaven in een bericht of pagina kunnen weergeven (en verwerken):
add_shortcode ('suq_form', 'suq_form_shortcode');
Hier gebruiken we de functie add_shortcode van WordPress om een shortcode met de naam suq_form en een functie met de naam suq_form_shortcode te definiëren die wordt aangeroepen wanneer WordPress de shortcode [suq_form] in een bericht of een pagina tegenkomt.
Voordat we naar de functies voor formulierenweergave en verwerking kijken, laten we het even hebben?
Omdat onze plug-in gegevens van de gebruiker accepteert, implementeren we de volgende beveiligingsmechanismen:
Een nonce is een getal dat één keer wordt gebruikt. We gebruiken ze om te controleren of de gegevens die bij ons binnenkomen eigenlijk afkomstig zijn van de formulieren die we hebben gemaakt.
Hier genereren we een nonce-veld met behulp van wp_nonce_field dat als een verborgen veld in ons formulier zal worden opgenomen:
wp_nonce_field ('suq_form_create_quote', 'suq_form_create_quote_submitted');
Omdat het nu een verborgen veld is in onze vorm, komt het terug bij ons wanneer het formulier wordt ingediend. We kunnen vervolgens controleren of de nonce geldig is met behulp van wp_verify_nonce:
wp_verify_nonce ($ _ POST ['suq_form_create_quote_submitted'], 'suq_form_create_quote'))
Dat zal waar terugkeren als de nonce verifieert.
Dit is de functie die door onze shortcode wordt genoemd. Het toont en verwerkt het offerteaanvraagformulier en het quote listing / verwijderingsformulier. We nemen het in hapklare stukjes en in stap 5 zullen we de hulpfuncties bekijken.
function suq_form_shortcode () if (! is_user_logged_in ()) ga terug 'Je moet ingelogd zijn om een offerte te plaatsen.
'; global $ current_user;
if (isset ($ _POST ['suq_form_create_quote_submitted']) && wp_verify_nonce ($ _ POST ['suq_form_create_quote_submitted'], 'suq_form_create_quote')) $ suq_quote_author = trim ($ _ POST ['suq_quote_author']); $ suq_quote_text = trim ($ _ POST ['suq_quote_text']); if ($ suq_quote_author! = "&& $ suq_quote_text! =") $ quote_data = array ('post_title' => $ suq_quote_author, 'post_content' => $ suq_quote_text, 'post_status' => 'pending', 'post_author' => $ current_user-> ID, 'post_type' => 'aanhalingstekens'); if ($ quote_id = wp_insert_post ($ quote_data)) wp_set_object_terms ($ quote_id, (int) $ _ POST ['suq_quote_category'], 'quote_category'); echo 'Citaat gemaakt en in afwachting van moderatie!
'; else // auteur of tekstveld is lege echo 'Quote NIET bewaard! Wie zei het? en Quote mag niet leeg zijn.
';
if (isset ($ _POST ['suq_form_delete_submitted']) && wp_verify_nonce ($ _ POST ['suq_form_delete_submitted'], 'suq_form_delete')) if (isset ($ _ POST ['suq_delete_id'])) if ($ quotes_deleted = suq_delete_quotes ( $ _POST ['suq_delete_id'])) echo ''. $ quotes_deleted. 'quote (s) verwijderd!
';
echo suq_get_create_quote_form ($ suq_quote_author, $ suq_quote_text, $ suq_quote_category); if ($ quotes_table = suq_get_user_quotes ($ current_user-> ID)) echo $ quotes_table;
Hier zullen we kijken naar de functies die de formulieren genereren en de functie die de geselecteerde aanhalingstekens verwijdert.
function suq_get_create_quote_form ($ suq_quote_author = ", $ suq_quote_text =", $ suq_quote_category = 0) $ out. = ''; return $ out;
functie suq_get_quote_categories_dropdown ($ taxonomy, $ selected) return wp_dropdown_categories (array ('taxonomy' => $ taxonomy, 'name' => 'suq_quote_category', 'selected' => $ selected, 'hide_empty' => 0, 'echo' => 0));
function suq_get_user_quotes ($ user_id) $ args = array ('author' => $ user_id, 'post_type' => 'citaten', 'post_status' => 'in behandeling'); $ posts = new WP_Query ($ args); als (! $ posts-> post_count) 0 retourneert; $ uit. = ''; return $ out;Je ongepubliceerde citaten
'; $ uit. = '
Formulieren kunnen in de browser worden gemanipuleerd om onverwachte gegevens achter te houden. In ons geval is aan elk selectievakje voor verwijderen de waarde van een bericht toegewezen. Maar wat als een kwaadwillende gebruiker die waarde heeft gewijzigd en onze verwijderfunctie heeft veroorzaakt om een bericht te verwijderen dat niet daadwerkelijk werd vermeld?
Een manier om dit te voorkomen, is om nonces te gebruiken voor elke rij postgegevens, zodat de nonces een unieke naam krijgen met de postwaarde die moet worden verwijderd. Vervolgens controleren we de nonce bij het indienen van het formulier om te controleren of het een echte retourwaarde is.
function suq_delete_quotes ($ quotes_to_delete) $ quotes_deleted = 0; foreach ($ quotes_to_delete als $ quote) if (isset ($ _ POST ['suq_post_delete_id_'. $ quote]) && wp_verify_nonce ($ _ POST ['suq_post_delete_id_'. $ quote], 'suq_post_delete_'. $ quote)) wp_trash_post ($ citaat); $ quotes_deleted ++; return $ quotes_deleted;
Voeg deze stijlinformatie toe aan het style.css-bestand in uw themamap:
#suq_quote_author width: 300px; #suq_quote_text width: 400px; Hoogte: 100px; #quotes font-size: 12px; #quotes th text-align: left;
Activeer de plug-in, zet de shortcode op een pagina, log in op uw site en test deze.
De broncode van de volledige plug-incode en een link naar de demosite staan bovenaan deze zelfstudie.
De bronmap bevat ook een Wordpress-paginasjabloon met een aangepaste lus die gepubliceerde offertes voor alle gebruikers weergeeft.