Het creëren van handige petities in uw berichten

WordPress is een geweldig platform voor meerdere doeleinden. Je kunt veel websites maken met veel verschillende doeleinden: een bedrijfswebsite, een fotodisplay, een nieuwsportaal, een restaurantwebsite met interactieve menu's ... Oh, en blogs natuurlijk. Je kunt bloggen met WordPress. Vergat dat.

Vreemd genoeg hebben non-profit organisaties de neiging om deze flexibiliteit over het hoofd te zien en hiervan te profiteren. In deze zelfstudie laten we zien hoe u een eenvoudig petitiescript kunt maken om te laten zien hoe een organisatie kan profiteren van WordPress.


Wat zijn we aan het bouwen, precies?

Ik ben een grote fan van shortcodes (zoals je kunt zien in mijn vorige berichten), dus we gaan een aantal shortcodes maken en een aantal handige functies om de shortcodes te gebruiken. We gaan deze allemaal samenbrengen in een bestand met de naam petition.php en gebruik het als een WordPress plug-in.


Helper-functies

Omdat we ze binnen onze shortcodes gaan gebruiken, dacht ik dat het beter zou zijn om ze eerst te maken en uit te leggen.

Een standaard e-mailvalidatiefunctie

Als u PHP5 op uw server gebruikt, gaan we de ingebouwde validators voor e-mail gebruiken voor onze functie:

 // e-mailadres valideren functie functie validate_email ($ email) if ($ email == ") return false; else return filter_var ($ email, FILTER_VALIDATE_EMAIL);

En als u iets ouds gebruikt zoals PHP4, kunt u een andere functie gebruiken die gebruikmaakt van reguliere expressies:

 // e-mailadres validatie functie functie validate_email ($ email) if ($ email == ") return false; else $ eregi = preg_replace ('/([a-z0-9_.-]+)' . '@'. '([a-z0-9 .-] +) 2.255'. '.'. '([az] +) 2,10 / i', ", $ email);  return leeg ($ eregi)? waar onwaar; 

Houd er rekening mee dat: Je kunt niet allebei gebruiken!

De functie om de inzendingen in te dienen

We zouden een andere databasetabel kunnen maken en gebruiken om de inzendingen van de petities te bevatten, maar ik denk niet dat dit een goede gewoonte is. En hey, wat is er mis met aangepaste velden?

 // stuur de ondertekenaar een meta-sleutel 'petition_submission' naar de postfunctie-inzending ($ name, $ email, $ date) global $ post; $ array = array ('name' => $ name, 'email' => $ email, 'date' => $ date); $ petition_meta = serialize ($ array); add_post_meta ($ post-> ID, 'petition_submission', $ petition_meta); geef waar terug; 

Zoals je uit de code kunt lezen;

  • We hebben de name $, $ e-mail en $ date variabelen in de functie (van de shortcode die we in een minuut krijgen)
  • Zet de drie variabelen samen door een array te maken en deze te serialiseren
  • En de gegevens zijn opgeslagen als een aangepast veld met de naam 'Petition_submission'

Eenvoudig, toch? Nu kunnen we bij de best moeilijk een deel.

De functie om de inzendingen op te halen

We kunnen de inzendingen nu opslaan, maar hoe krijgen we ze en doen we dingen met hen? Hier is hoe:

 // haal de inzendingen op van de functie post get_the_submissions ($ number = 5) $ petition_meta = get_post_custom_values ​​('petition_submission'); if ($ petition_meta) $ output = array_slice ($ petition_meta, $ number * -1); return array_reverse ($ output); 

Weet je nog dat ik zei dat het zo zal zijn best moeilijk? Ik loog:

  • We hebben de waarden van de post-meta's toegewezen met de 'petition_submission'sleutel tot een arrayvariabele
  • Toen kregen we $ number (Standaard 5) van inzendingen vanaf het einde van de array (let op de -1)
  • En we hebben de omgekeerd lijst van die gesneden array om deze van de nieuwste naar de oudste te rangschikken

Extra: CSS-kiezers om te gebruiken

We zullen enkele CSS-kiezers in de code gebruiken, dus zet ze in uw style.css bestand van uw thema:

 #petition_form  #petition_form label font-weight: bold; lettertype: groter; regelhoogte: 150%;  #petition_form input display: block; marge: 5px 0; opvulling: 3px;  #petition_name width: 200px;  #petition_email width: 200px;  #petition_submit padding: 5px;  .petition_success color: # 693;  .petition_error color: # A00;  .petition_list lijststijl: geen; marge: 0; opvulling: 0;  .petition_list li background-image: none! important;  .petition_list span display: inline-block; breedte: 45%; opvulling: 1%; marge: 1%; achtergrondkleur: #FAFAFA;  .submission_name  .submission_date font-style: italic; kleur: # 888; 

Voel je vrij om de standaardwaarden van de eigenschappen te bewerken :)


shortcodes

We hebben de helperfuncties en de CSS-code voltooid. Laten we nu naar het leuke gedeelte gaan - de shortcodes!

We zouden kunnen doen met slechts één grote shortcode om het formulier bij te voegen, de inzendingen te vermelden en het aantal inzendingen te tonen, maar ... waarom al het plezier doden? Bovendien zouden afzonderlijke shortcodes voor deze drie elementen ons bevrijden om ze te gebruiken waar we maar willen in onze inhoud.

Heb ik je verteld hoe ik liefde shortcodes?

De shortcode voor het aanvraagformulier

Deze functie is lang, dus ik ga de code uitleggen in de code, met PHP opmerkingen:

 function petition_form_sc ($ atts) // extract the shortcode parameters extract (shortcode_atts (array (// de tekstwaarde van de verzendknop 'submit' => 'Submit', // de tekst voor het foutbericht 'error' => 'Uw e-mailadres is niet geldig. Voer het formulier opnieuw in met een geldige naam en e-mailadres.', // de tekst wanneer de inzending succesvol is 'succes' => 'Uw inzending is opgeslagen. u! '), $ atts)); // de HTML-elementen van ons verzoekformulier $ form = '
'; // als het formulier "POST" is ed ... if ($ _SERVER ['REQUEST_METHOD'] == 'POST') // ... de naam krijgen ... $ name = $ _POST ['petition_name']; // ... en het e-mailadres ... $ email = $ _POST ['petition_email']; // ... en de datum van "zojuist", met het datumnotatie van uw WP-opties. $ date = date (get_option ('date_format')); // valideer eerst het e-mailadres! if (validate_email ($ email) == true) // het e-mailadres is geldig! onthoud de onderstaande functie? inzending ($ naam, $ e-mail, $ datum); // we hebben de variabelen verzonden met de functie submission (), nu drukken we het succesbericht ZONDER HET FORMULIER: return '
'. $ succes. '
'; // (als u wilt dat het formulier na de verzending opnieuw wordt afgedrukt, voegt u gewoon $ formulier toe vóór de puntkomma.) else // het e-mailadres is NIET geldig! we zouden de foutmelding MET HET FORMULIER moeten afdrukken: terug '
'. $ fout. '
'. $ Form; // en als het formulier niet "POST" ed is (wat betekent dat de bezoeker net de pagina heeft bezocht), laat dan gewoon het formulier zien! else return $ formulier; add_shortcode ('petition_form', 'petition_form_sc');

Ik probeerde zo duidelijk mogelijk te zijn, maar als je gelooft dat ik iets heb weggelaten, vraag het me dan gerust door te reageren op dit bericht!

De shortcode voor de lijst met inzendingen

Het gedeelte "laatste invoer" is het bewijs dat mensen zich aansluiten bij jouw zaak, dus we moeten op zijn minst een aantal inzendingen vermelden.

Dit is ook geen korte functie, dus ik zal de code nogmaals met opmerkingen toelichten:

 function petition_list_sc ($ atts) // extraheer de shortcode parameters extract (shortcode_atts (array (// we zouden een standaard nummer kunnen instellen maar onthoud dat we dat al deden in de get_the_submissions () functie :) 'number' => "), $ atts)); // krijg de $ nummer meest recente inzendingen ... $ submissions = get_the_submissions ($ number); // ... en list 'em! $ output ='
    '; if ($ submissions) foreach ($ submissions als $ submission) // unserialize the data $ signer = unserialize ($ submission); // maak de gegevens opnieuw NEER, weet niet waarom ... $ signer = unserialize ($ ondertekenaar); // Misschien wilt u dit onderdeel wijzigen, maar het standaardformaat ziet er geweldig uit met de CSS in deze zelfstudie. $ output. = '
  • '; $ output. = ''. $ ondertekenaar ['naam']. ''; $ output. = ''. $ ondertekenaar ['datum']. ''; $ output. = '
  • '; $ output. = '
'; return $ output; add_shortcode ('petition_list', 'petition_list_sc');

Nogmaals, voel je vrij om alles te vragen wat je wilt vragen door op deze post te reageren.

De shortcode voor de petitie

Dit is echt een kleine functie, alleen om te zien hoeveel inzendingen worden verzonden:

 function petition_count_sc () $ petition_meta = get_post_custom_values ​​('petition_submission'); return count ($ petition_meta);  add_shortcode ('petition_count', 'petition_count_sc');

Zoals je ziet, gooit het gewoon de aangepaste velden naar een array en telt het en retourneert het nummer.


Conclusie

Ik moet benadrukken dat dit een heel eenvoudig voorbeeld is om te laten zien dat organisaties kunnen profiteren van WordPress door scripts als deze te gebruiken. Als u een verbetering voor dit script (of zelfstudie) kunt bedenken, deel uw mening dan in de onderstaande opmerkingen. Bedankt voor het lezen!