För alla som har missat det vill jag bara tipsa om https://github.com/mikaeljorhult/wp-plugin-boilerplate som är en fenomenal wordpress plugin boilerplate. Där finns grunden till det mesta du kan tänka dig vilja göra med den plugin du funderar på och ur du ska koda den. Varsegod! Think no more!
Wordpress
Wordpress är ett CMS(content management system) som är open source. Det ger dig som användare en väldig möjlighet att på ett enkelt sätt uppdatera och hålla din hemsida vid liv.
Jag jobbar som webbkonsult och åtar mig dagligen uppdrag som wordpresskonsult. I den här kategorien poster ser du alla mina inlägg som har med wordpress att göra. Det kan röra allt från nyheter som till mina egna projekt(kodsnuttar, teman, pluginer, etc).
I Dalarna är jag en av de främsta wordpresskonsulterna och har även åtagit mig jobb runt om i hela Sverige.
Länktips: github.com
has_cap was called with an argument that is deprecated since version 2.0
När du har DEBUG på så kan du vid användning av plugins väldigt ofta se felmeddelandet:
has_cap was called with an argument that is deprecated since version 2.0
Den här varningen kommer oftast av att pluginet skapar en meny i administrationsgränssnittet och använder sig där av ett förlegat argument. När man skapar en meny så måste man ange vem som ska få använda administrationsmenyn för din plugin och det gör man genom wordpress ”Roles and capabilities”.
För mig gav t.ex simplepie core pluginen den här noticen och fixet var väldigt enkelt. Leta upp raden som skapar administrationsmenyn. Den borde se ut ungefär så här:
add_options_page('SimplePie Core', 'SimplePie Core', 8, 'simplepie_core', simplepie_core_options_page');
Det tredje argumentet, i det här fallet åttan, är en siffra som anger vem som kan se det här. Men det är inte helt korrekt användning av funktionen och genererar därför felmeddelandet. Ändra i stället det tredje argumentet till ‘manage_options’ så försvinner felmeddelandet. Raden blir då att se ut så här:
add_options_page('SimplePie Core', 'SimplePie Core', 'manage_options', 'simplepie_core', simplepie_core_options_page');
Och det borde ta bort felmeddelandet. Tänk på att det kan förekomma på flera ställen i flera filer – på en enda plugin. Tänk också på att om du ändrat i en plugin och den sen uppdateras till en nyare version så skrivs dina ändringar över. För att förhindra detta så uppmuntrar jag så mycket jag bara kan till att du efter att ha förbättrat en plugin skickar in en buggfix till författaren så kommer han/hon med största sannolikhet att lägga in förbättringen i koden.
Tre standardfunktioner i min functions.php
Här är tre av mina standardfunktioner som jag alltid har med i min functions.php, då de kan vara nyttiga att använda till olika sorters andra funktioner:
getTopAncestor()
Den här använder jag när jag behöver få reda på vad sidan heter som är den högsta föräldern i hierarkin till en sida.
function getTopAncestor($pageID) { global $post; if($post->post_parent) { $ancestors = get_post_ancestors($pageID); $root = count($ancestors) -1; $parent = $ancestors[$root]; return $parent; } }
isChild()
den här funktionen använder jag för att ta reda på om nuvarande sida är ett barn till någon annan sida.
function is_child() { global $post; if( is_page() && is_array($post->ancestors) && ! empty($post->ancestors) ) { return true; } else { return false; } }
the_slug()
den här funktionen använder jag för att ta returnera en posts slug. om en post heter ‘Emil kan wordpress’ så blir slugen ‘emil-kan-wordpress’
function the_slug($pageID) { $post_data = get_post($pageID, ARRAY_A); $slug = $post_data['post_name']; return $slug; }
Packlista #sswc
Imorgon åker jag till #sswc för att i tre dagar diskutera internet, nörda och lära mig massor av nytt av andra intelligenta människor. Det ska bli jättespännande. På internet florerar mängder med packningslistor över saker som man vill ha med sig, och jag har tröttnat på listor över tält, sovsäckar och liggunderlag!
Här är min packlista som jag ser till att packa min dator med innan jag åker:
- node.js – för serverside javascript
- jquery – självklart val
- apache + mysql + php
- ruby on rails
- socket.io – för appar som kan prata med node.js
- senaste wordpress
Och med det i datorn så känner jag mig beredd på det mesta jag kan komma att möta i form av ideer, saker som bara vill hoppa fram och som där och då måste kodas. Spännande värre. Hoppas på mycket kvalitativt nördande.
För ett drygt dygn sedan släpptes wordpress 3.2 och det har redan laddats ner över 330 000 gånger. Fantastiska siffror!
WordPress 3.2 är här
Ja! Nu är wordpress 3.2 här och det gör att vi är jätteglada idag. Jag har testkört 3.2betan på några installer i det sista och den är RIKTIGT trevlig. Bland nyheterna hittar du bland annat fullskärms-textinmatning som låter dig fokusera på ditt skrivande, i en miljö där inget kan störa dig. Dessutom skickar de med twentyeleven som nytt standardtema och ja – det är en uppgradering från twentyten som tidigare följde med. Man har dessutom tagit tag i panelen och gett den ett fräschare utseende. Under huven har man gjort flera prestandaförbättringar.
Den här versionen är tillägnad pianisten George Gershwin
Automatiska twitterlänkar i wordpress
Jag har skrivit en enkel funktion för att automatiskt skapa twitterlänkar när man i ett inlägg skriver t.ex @emomilol Det räcker alltså att skriva ett@ och sen ett namn. Väldigt smidigt och enkelt.
Så här gjorde jag:
Öppna functions.php och lägg till följande:
function twittify( $data , $postarr ) { $ret = $data['post_content']; $ret = preg_replace("#(^|[\n ])@([^ \"\t\n\r<]*)#ise", "'\\1<a href="\"http://www.twitter.com/\\2\"">@\\2</a>'", $ret); $data['post_content'] = $ret; return $data; } add_filter( 'wp_insert_post_data' , 'twittify' , '99' );
Och voila, det bör fungera!
Obs – den matchar även mailadresser så skriver du sådana får du redigera manuellt.
Ny design!
Japp! larsemil.se har fått en ny design!
Trots några hektiska jobbdagar så har jag pillat ihop ett nytt utseende på siten. Att programmera är ju trots allt mer än bara ett jobb – det är ju en av mina största hobbys också.
En av de stora anledningarna till bytet var att jag satt fast i ett tema som jag inte hade gjort själv. Det gjorde det väldigt bökigt och väldigt krångligt när jag ville göra något utöver att posta inlägg på sidan. Nu när jag byggt mitt eget så är jag glad och lycklig och förändringar enkla att göra.
Bland annat har jag byggt in stöd för gömda fält som man kan fälla ut. För att göra det enkelt har jag byggt in i temat att man kan gömma delar av text direkt i editorn.
Så här t.ex, det här är en gömd text.
Förövrigt är planen att tagga upp inläggen mycket bättre så att jag kan använda mig mer av liknande inlägg.
Wordpress har också fått en större del på sidan, då det är vad jag jobbar mest med det och behöver någonstanns att posta det jag gör till wordpress.
Finns några saker kvar att göra: som att bygga kommentarsfunktionen, styra upp kontaktfunktionen som inte fungerar ännu och lite annat. Men inspirationen finns helt plötsligt här och det känns bra. Får se om det håller i sig!
Lägga till knapp i tinymce för wordpress som ändrar t.ex klass
På wordpressforumet på facebook togs frågan upp hur man gör för att lägga till en knapp i wordpress tinymce editor. Problemet var att knappen bytte ut istället för att ändra texten. Efter lite trixande så kom jag på hur man gjorde och här är min lösning:t
Uppdaterat!!!
Efter att ha velat använda mig av den här funktionen själv så har jag insett att den inte helt gjorde det jag ville, då den infogade tecken: < istället för riktiga htmltaggar. Jag löste det genom att byta ut mceInsertContent till mceInsertRawHTML.
Det är uppdaterat nedanför här.
functions.php
add_filter('mce_external_plugins', "tinyplugin_register"); add_filter('mce_buttons', 'tinyplugin_add_button', 0); function tinyplugin_add_button($buttons){ array_push($buttons, "separator", "tinyplugin"); return $buttons; } function tinyplugin_register($plugin_array){ $url = trim(get_bloginfo('url'), "/"); $url.= "/wp-content/plugins/tiny-plugin/editor_plugin.js"; $plugin_array["tinyplugin"] = $url; return $plugin_array; }
Och sen i filen /wp-content/plugins/tiny-plugin/editor_plugin.js(du får själv skapa den mappen och filen)
function tiny_plugin(text) { return "<p class='xyz'>"+text+"</p>"; } (function() { tinymce.create('tinymce.plugins.tinyplugin', { init : function(ed, url){ ed.addButton('tinyplugin', { title : 'Insert TinyPlugin', onclick : function() { ed.execCommand( 'mceInsertRawHTML', false, tiny_plugin(ed.selection.getContent({format : 'text'})) ); }, image: url + "/wand.png" }); } }); tinymce.PluginManager.add('tinyplugin', tinymce.plugins.tinyplugin); })();
Tack till:
http://ditio.net/2010/08/15/adding-custom-buttons-to-wordpress-tinymce/
En ny slider!
Jag har kollat igenom alla möjliga olika sliders för att hitta en som passar till det jobb jag gör åt en kund just nu. Mina krav var egentligen ganska simpla:
- Kunna skapa flera olika sliders, med unika bilder och inställningar på varje slide.
- Att välja bilder från wordpress media bibliotek.
Alla sliders som fanns hade tusen inställningsmöjligheter vad gällde hur bilderna skulle bytas och allt annat, men att just klara av de två ovanstående kraven och presentera det på ett vettigt sätt var helt omöjligt.
Så jag bestämde mig för att göra en egen
Sagt och gjort, fem timmars kvällsprogrammering resulterade i en enkel plugin till wordpress där man kan skapa ett oändligt antal sliders och unika inställningar för varje slide. Slidern bygger såklart på jquery och går självklart att skriva ett betydligt mer avancerat javascript som hanterar bildskiftningen, men keep it simple tänkte jag och det är det nu. Och fungerar rackarns bra.
Håll utkik efter demo!
Koden ska nu snyggas upp lite och så ska jag lägga till lite enkla inställningar som man kan vilja ha om man inte vill hårdkoda och sen kommer jag att släppa den fritt på ett eller annat sätt.