TextMate snippet for PRG-pattern in WordPress

This is free TextMate snippet day here at jonasnordstrom.se. Enjoy, and please let me know if there are any errors.


From wikipedia:

Post/Redirect/Get (PRG) is a web development design pattern that prevents 
some duplicate form submissions, creating a more intuitive interface for 
user agents (users). PRG implements bookmarks and the refresh button in a 
predictable way that does not create duplicate form submissions. 

image from wikipedia

PRG is the pattern to aim for when creating functionality for the WordPress backend (wp-admin). But it’s a pain to keep track of which hooks to use, how the redirection works and stuff like that.
Here’s a TextMate snippet that hopefully will be of some help.

Note: I will add nonce and update this post, just wanted to save the code somewhere when it was in front of me, you know how it is …

<?php 
function ${1:function_name}_page() {

    if ( isset( $POST['action'] ) && !current_user_can( '${2:edit_page}' ) ) {
        return;
    } ?>

    <form action="edit.php" method="post">
        <input type="hidden" name="page" value="${1/\_/-/}-page" />
        <input type="hidden" name="action" value="${3:action-name}" />
        <input type="submit" value="${4:Button Text}" />
    </form>
    <?php
}
function $1() {
    if ( isset(\$_POST['action']) && \$_POST['action'] == '$3') {
        // Do your magic here
        $0;

        \$location = admin_url() . "edit.php?page=" . $_POST['page'] . "&feedback=${5:Feedback+here}";

        \$status = 302;
        wp_redirect( \$location, \$status );
        exit;
    }
}
function add_$1_page() {
    add_management_page( '${6:Page Title}', '${7:Menu Title}', '${8:manage_options}', 
                  '${9:menu-slug}', '${1:function_name}_page' );
}

add_action( 'admin_init', '$1' );
add_action( 'admin_menu', 'add_$1_page' );

wpdb->delete() i WordPress 3.4

En av nyheterna i WordPress 3.4 är att metoden delete har tillkommit till wpdb-klassen. Tidigare fanns av någon anledning bara insert och update.
Enkelt exempel på hur den kan användas:
Vad jag vet finns det ingen inbyggd funktion för att ta bort alla förekomster av ett custom field, före WordPress 3.4 var man tvungen att göra en query direkt i databasen för att få till den funktionaliteten.

  function delete_post_meta_for_all( $meta_key ) {  
     global $wpdb; 
     return $wpdb->query( 
        $wpdb->prepare( "DELETE FROM $wpdb->postmeta WHERE meta_key = %s ",
           $meta_key ) ); 
  } 

Tyvärr måste man fortfarande göra något liknande, men syntaxen är lite mer ”WordPress”:

function delete_post_meta_for_all( $meta_key ) { 
   global $wpdb; 
   $result = $wpdb->delete( "$wpdb->postmeta" , 
      array( "meta_key" => $meta_key) , array( '%s' ) ); 
}

Syntax:

function delete( $table, $where, $where_format = null )
$table: table name
$where: A named array of WHERE clauses (in column => value pairs). Multiple clauses will be joined with ANDs. Both $where columns and $where values should be ”raw”.
$where_format Optional: An array of formats to be mapped to each of the values in $where. If string, that format will be used for all of the items in $where. A format is one of ‘%d’, ‘%f’, ‘%s’ (integer, float, string). If omitted, all values in $where will be treated as strings unless otherwise specified in wpdb::$field_types.
return int|false The number of rows updated, or false on error.

Mer info här

Jonas kuraterade länkar 12 Juni 2012

Nya kuraterade länkar. Jag letar upp och sorterar högt och lågt, ofta med fokus på teknik, media, WordPress, musik och annat som ligger mig varmt om hjärtat.

Resultatet av vikttävlingen

Vi var i Storlien i februari tillsammans med några goda vänner. Efter ett par kvällar med pasta, pizza, öl och vin så kom vi på något sätt fram till att vi borde gå ner i vikt. Med ”vi” menas Henrik och jag, gubbarna.

Detta växte fram till ett vad. Vem kan gå ner mest i vikt på 10 veckor? Vi är båda ganska tävlingsinriktade så det behövdes egentligen ingen ytterligare morot utöver att besegra den andra, att vinna. Men vi slängde ändå in en helkväll på Bullen i Malmö i potten.

Tävlingen inleddes den 26:e februari och avslutades idag.

Jag vann! 🙂

Min viktkurva visar en nedgång från 86,9kg till 72,7, en minskning på 14,2kg (16,34%)

Viktkurva från Withings

Det var aldrig riktigt spännande, en kassaskåpsäker seger. Som att stjäla godis från småbarn. En promenad i parken. En … ja ni fattar.

Egentligen borde jag ha en före-efter-bild här, men det blir för corny. Jag bjuder på en (före-)bild på losern i stället …

Påskblandning

Miriam Margolyes
—————-

Vilken fantastisk rolig människa.

httpv://youtu.be/oeopD53J8MM

Ryan O’Shaughnessy i Britain’s got talent
—————–

Jag kan inte låta bli att bli lite rörd.

httpv://youtu.be/6KdviedF9iM

Disneytime
———-

[![Shocking][kiss-img]][kiss-tumblr]

Friläggningarna var inte bättre förr
====================================

[![Landslaget][landslaget-img]][landslaget-link]

RIP Mike Wallace
—————-

Här intervjuar [Mike Wallace](http://en.wikipedia.org/wiki/Mike_Wallace_(journalist)) den store arkitekten Frank Lloyd Wright

httpv://youtu.be/PQSXOMLJzT8

[kiss-img]: http://26.media.tumblr.com/tumblr_m1pfm89fJM1qzsyayo1_500.jpg
[kiss-tumblr]: http://www.newsoftheunreal.com/post/20172416019/by-rodolfo-loaiza ”klicka för att gå till bilden på tumblr”

[landslaget-img]: http://distilleryimage8.instagram.com/e397c6a6824811e181bd12313817987b_7.jpg
[landslaget-link]: http://gunnar.se/2012/04/09/frilaggningarna-var-inte-battre-forr/ ”Friläggningarna var inte bättre förr.”

Förslag på podcasts

Jag kör bil till jobbet varje dag, en sträcka på cirka en halvtimme, ibland upp till en timme. Under den tiden brukar jag lyssna på podcasts.
Här är de jag försöker följa just nu. Hojta om du tycker att någon riktigt bra saknas.
Och lugn, de som är video tittar jag alltså inte på i bilen.

podcasts

WebCoast 2012

16-18 mars åker jag till knytkonferensen [WebCoast](http://webcoast.se) i Göteborg.

De beskriver själva konferensen så här:

En fysisk mötesplats för oss som arbetar, leker och umgås på webben.
En bytesmarknad för idéer och åsikter, kunskap och inspiration.
Vi erbjuder en helg där du vidgar dina kunskaper och ditt kontaktnät,
en helg du kommer att minnas och ha glädje av länge.

En sådan beskrivning går förstås inte att motstå.

Deltagare: [The geek list](http://webcoast.se/deltagare)

Plugin: No Soup

Jag gjorde en plugin (No Soup) som kan spärra vissa IP-adresser från att komma åt din WordPress-sajt och istället skicka iväg dem till en annan adress. Den kan också ta hela IP-block och peka om dem.

Det här skulle till exempel kunna användas för att neka tillträde åt svenska myndigheter militär och politiska partier och istället skicka iväg dem till Wikipedias artikel om ACTA

Läs mer om No Soup.
Ladda ner No Soup från WordPress repository

Jonas tipsar 16 January 2012