WordCamp Stockholm 2010

Den 23-24 oktober går Sveriges första WordCamp av stapeln. Platsen är Tekniska muséet i Stockholm, och dit kommer vi för att lära av varandra samt ha trevligt – allt i skön WordPress-anda.

Jag deltog i en tävling av Binero och lyckades knipa en biljett till WordCamp Stockholm den kommande helgen (23-24 oktober).

Ser ni mig där så tveka inte att säga hej!

Uppdatering 2010-10-21

P.g.a. lite oplanerade studier så har jag idag tvingats avboka min biljett på WordCamp. Vi ses nästa år istället!

jQTouch och WordPress

Eftersom mobila webbplatser är “the shizzle” numera så vill inte jag vara sämre än att haka på tåget. Då jag bygger mycket webbplatser i WordPress så vill jag ha ett “enkelt” sätt att ha ett separat tema för den mobila sidan och låta den rulla med hjälp av jQTouch.

Tillägget

Så, vad är det jag vill göra, jag vill identifiera besökarens webbläsare och om det är en mobil så ska den “on-the-fly” byta till mitt mobila tema. Jag vill sedan ha ett sätt att kunna hoppa mellan den mobila och vanliga webbplatsen.

All kod finns i en Gist på GitHub (mycket anpassad för mina behov) för hur jag löst detta. Jag skapade ett plugin som tog hand om det hela. Om mitt vanliga tema heter ‘xc1-test’, så kommer jag att kolla ifall temat ‘xc1-test-mobile’ existerar.

WordPress ger oss möjligheten att ladda in ett separat tema med hjälp av filtret ‘stylesheet’, så vi gör en kontroll ifall temat finns (och efterfrågas) och i sådana fall hoppar vi över till det.

Temat

Temat xc1-test-mobile innehåller inte så mycket annat än exempelkod från jQTouchs lösning, så det är inte mycket nytt under solen där.

Det som inte är så vackert just nu är hur sidor och inlägg hämtas ifrån WordPress, jQTouch hämtar enbart statiska filer, därför har jag fått lov att lägga till .html i slutet på mina sidor. Poster däremot får man lov att ändra manuellt permalänk-inställningen i administrationen så den har .html på slutet. Detta kommer jag nog ändra och skriva om AJAX-hämtningen manuellt, men detta var mest för att få allting att fungera i ett inledande skede.

Temats filer single.php och page.php ska inte innehålla get_header() och get_footer().

Jag kan sedan hoppa mellan de två olika versionerna genom querystringen ?xc1-layout=mobile och ?xc1-layout=default.

Menyer

Något som är riktigt fint i WordPress 3 är att jag kan skapa en separat meny (i menyhanteraren) för den mobila versionen och använda den i detta mobila tema, då kan jag skapa separata mobilversioner av de sidor som jag vill ha tillgängliga ifrån mobilen.

Slutord

Jag har tittat mycket på hur andra har löst detta, jag kommer skriva mer om detta när jag känner mig nöjd med lösningen, ge gärna kommentarer på hur ni löst detta.

WordPress pluginguide: Sätta ny titel i en shortcode

Jag håller på med ett Reddit-liknande WordPress-plugin på ett projekt hos Populate.

Systemet listar ett antal frågor som du som besökare kan “rösta upp”, sedan visar man de populäraste frågorna och lite annat. Varje fråga har en egen landningssida, exempelvis /fraga/10 (där 10 är id:t på frågan). Landningssidan och listningen av frågorna definieras av shortcodes i sidor, exempelvis: [poll_show_single] och [poll_list].

På sidan som innehåller [poll_show_single], i det här fallet är det sidan ‘fraga’, vill jag ha möjlighet att sätta frågans rubrik som ny titel (via filtret wp_title).

Det går tyvärr inte att ändra titeln inifrån shortcoden, utan man får identifiera vilken sida som shortcoden finns på och sen sätta titeln separat. Detta kan du göra på följande sätt:

function locate_shortcode ($shortcode) {
  global $wpdb;
  
  $search = ((!empty($search))?" OR ":"")."post_content LIKE '%$shortcode%'";
  
  $query = "SELECT ID,post_title,post_name,post_content FROM $wpdb->posts WHERE $search AND post_type='page'";
  $result = $wpdb->get_results($query);

  return array('id' => $result[0]->ID, 'title' => $result[0]->post_title, 'name' => $result[0]->post_name, 'uri' => get_page_uri($result[0]->ID) );
}

Sedan läser du av den:

$pollSingle = locate_shortcode( 'poll_show_single' );  
$pollSingleURI = $pollSingle['uri'];

Då får jag fram vilken sida som innehåller shortcoden för att visa en enskild fråga, därefter kan jag haka in mig på filtret ‘wp’ och sätta titeln:

add_filter('wp', 'titles' );

I titels() kollar vi sedan upp om vi står på rätt sida (den som finns i $pollSingleURI) och jämför den med $wp_query->query[‘pagename’]:

function titles() {
  global $wp_query, $wpdb, $newTitle, $pollSingleURI;
    
  // Single poll
  if ($wp_query->query['pagename'] == $pollSingleURI) {
    if (preg_match("/\d+\/?$/", $wp_query->query['page'])) {
      $pollID = str_replace('/', '', $wp_query->query['page']);
      $result = $wpdb->get_results( sprintf("SELECT subject FROM %spoll WHERE id = %d LIMIT 1", $wpdb->prefix, $wpdb->escape($pollID) ) );

      // Set title
      $newTitle = esc_html($result[0]->subject);
      add_filter('wp_title', 'frontend_set_title' , 10, 2 );
    }
  }
}

Ovanstående SQL-fråga hämtar just nu frågans titel, men detta ändrar du givetvis till det du vill ha som titel.

Och eftersom PHP fortfarande har lite problem med closures/anonyma funktioner så måste titeln sättas separat:

 
function frontend_set_title($title, $separator) {
  global $newTitle;
  return esc_html($newTitle)." ".$separator;
}

Allt är ryckt ur en klass för att lättare kunna visa hur det fungerar, därav alla globala variabler *urk*. Denna metod kräver inga “rewrites” eller “template redirect intercepts”.

Visa ID på Media i WordPress

Jag hade nyss ett behov på jobbet att visa vilket ID ett objekt har i mediaredigeraren (WordPress). Detta kan vara bra att ha när man ska bygga gallerier, framförallt när man exkluderar vissa bilder genom att använda ID:et.

Kod:

add_filter('attachment_fields_to_edit', 'enable_media_id', 10, 2);
function enable_media_id( $form_fields, $post ) {
    $form_fields["enable-media-id"] = array("label" => "MediaID", "input" => "html", "html" => "

".$post->ID."

"); return $form_fields; }

Bild på hur det kommer se ut:

(Jag såg idag att någon hade önskat denna funktionaliteten på WordPress.org -> Ideas)

Nyheter kring Shopp 1.1

Utveckligen av Shopp går i en rasande fart framåt. Just nu fokuserar utvecklarna främst på att se till att göra kodbasen stabil och se till att allting fungerar.

Jag nämnde i mitt senaste inlägg kring Shopp att en alpha-version skulle dyka upp ganska kort efter att det postades. Den har dykt upp för ganska länge sedan och det ser riktigt bra ut, det som har fått mycket fokus är baksidan, alltså källkoden, det gör att det inte är några jättestora förändringar utseendemässigt. Det är förvisso lite enklare att hitta i orderdetaljerna och en andra småsaker.

Något som jag trivs riktigt bra med är hanteringen av betalningsmodulerna, jag var med Jonathan Davis (huvudutvecklare) en kväll och vi gjorde i ordning Payson-modulen så den är kompatibel med 1.1. Jisses vilken skillnad i kod jämfört med den tidigare versionen 1.0.x.

Momssatser för specifika kategorier är även det möjligt, men det är lite finputsning på det kvar innan den fungerar klockrent.

Så, när kommer den?

Det som just nu tar tid är QA-delen, att se till att allting funkar. Det har varit lite dåligt med testning från min egen sida, men jag räknar med att sätta igång ordentligt någon gång under nästa vecka. Det nämndes i en videointervju med Jonathan att de siktade på slutet av juni, men det är flytande.